Leetcode

Leetcode.283.Move Zeros

2019-12-11  本文已影响0人  Jimmy木

题目

给定一个数组,将数组中的0移动到数组结尾。

Input:[0,1,0,3,12]
Output: [1,3,12,0,0]

思路1

遇到0就去后面不为0的数字交换,每个非0的数字交换一次。

void moveZeroes(vector<int>& nums) {
    for (int i = 0; i < nums.size()-1; i++) {
        if (nums[i] != 0) {
            continue;
        }
        for (int j = i+1; j < nums.size(); j++) {
            if (nums[j] != 0) {
                int temp = nums[i];
                nums[i] = nums[j];
                nums[j] = temp;
                break;
            }
        }
    }
}

思路2

计数器。计算前面0的数量n,遇到非0就和i-n的数字交换。最后将末尾数字置为0.

void moveZeroes(vector<int>& nums) {
    if (nums.size() < 2) return;
    int count = 0;
    for (int i = 0; i < nums.size(); i++) {
        if (nums[i] == 0) {
            count++;
        } else {
            nums[i-count] = nums[i];
        }
    }

    for (int i = (int)nums.size() - count; i < nums.size(); i++) {
        nums[i] = 0;
    }
}

总结

不断思考,写出最高效简洁的代码。

上一篇下一篇

猜你喜欢

热点阅读