给定一个数组,将数组中的0全部移到数组的末尾,同时保持非0元素的相对顺序不变。
Input: [0,1,0,3,12]
Output: [1,3,12,0,0]
思路:
题目要求不要用到复制数组,所以只能使用交换的方法,且要尽可能少的操作总数。运用2个下标 i, j ,下标 i 记录遍历数组的下标,当遍历到数组元素为非0元素时,停下来运用下标 j 来寻找在 i 之前的0.因为已知 i 是非零元素,所以当 j = i 时,表示没找到,否则存在0,停下来交换。然后 j+=1.
void moveZeroes(vector<int>& nums) { int j = 0; for (int i = 0; i < nums.size(); i++) { if (nums[i] != 0) { for (j; j < i; j++) { if (nums[j] == 0) break; } if (j < i) { nums[j] = nums[i]; nums[i] = 0; j += 1; } } } }