283.Move Zeroes


给定一个数组,将数组中的0全部移到数组的末尾,同时保持非0元素的相对顺序不变。
Input: [0,1,0,3,12]
Output: [1,3,12,0,0]

思路:
题目要求不要用到复制数组,所以只能使用交换的方法,且要尽可能少的操作总数。运用2个下标 i, j ,下标 记录遍历数组的下标,当遍历到数组元素为非0元素时,停下来运用下标 来寻找在 之前的0.因为已知 是非零元素,所以当 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;
            }
        }
    }
}

 

posted @ 2020-05-14 15:16  星海寻梦233  阅读(88)  评论(0编辑  收藏  举报