OJ lintcode 移动零

给一个数组 nums 写一个函数将 0 移动到数组的最后面,非零元素保持原数组的顺序
注意事项
1.必须在原数组上操作
2.最小化操作数

您在真实的面试中是否遇到过这个题?
Yes
样例
给出 nums = [0, 1, 0, 3, 12], 调用函数之后, nums = [1, 3, 12, 0, 0].

/*
这个也可以通过oj
不过时间复杂度比较高
class Solution {
public:
    /**
     * @param nums an integer array
     * @return nothing, do this in-place
     */
     /*
     void moveZeroes(vector<int>& nums) {
        // Write your code here
        int length=nums.size();
        for(int j=0;j<length;j++){
            for(int i=0;i<length-1-j;i++){
                if(nums[i]==0){
                    //如果当前元素等于0的话,这个元素和下一交换 不管下一个什么什么,一次循环可以确定的是,是最后一个元素编程0
                    int temp=nums[i];
                    nums[i]=nums[i+1];
                    nums[i+1]=temp;
                }
            }
        }
    }
};
*/

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int pw = 0;
        for (int pr = 0; pr < nums.size(); pr++) {
            if (nums[pr] != 0) {
                nums[pw] = nums[pr];
                pw++;
            }
        }

        // 再把pw指向的元素后面的0补上
        for (; pw < nums.size(); pw++) {
            nums[pw] = 0;
        }
    }
};
    原文作者:zhaozhengcoder
    原文地址: https://www.jianshu.com/p/4ce2539fb4f0
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞