1、一个整数数组,把非0的整数移到左边,对整数的顺序不做要求。写一个函数实现,并返回数组的非0整数个数。不使用额外的存储。比如:
初始数组为:[ 1, 0, 2, 0, 0, 3, 4 ],处理后的数组是:[ 4, 1, 3, 2, 0, 0, 0 ],函数返回非0整数的个数4。
解答:两个指针,一个从左向右移动,一个从右向左移动。
int moveLeft(int* arr, int len) { if (arr == NULL || len <= 0) return -1; int i = 0; int j = len - 1; while (i <= j) { if (arr[i] != 0) { if (arr[j] == 0) { j--; } i++; } else { if (arr[j] != 0) { arr[i] = arr[j]; arr[j] = 0; i++; } j--; } } return i; }
2、假设数组长度为N,有M个0,需要多少次交换。
min(M, N-M)
时间: 2024-10-09 08:04:09