Lintcode 移动零

来源:互联网 发布:西门子s7200仿真软件 编辑:程序博客网 时间:2024/05/21 07:55

给一个数组 nums 写一个函数将 0 移动到数组的最后面,非零元素保持原数组的顺序

注意事项

1.必须在原数组上操作
2.最小化操作数

class Solution {public:    /**     * @param nums an integer array     * @return nothing, do this in-place     */    void moveZeroes(vector<int>& nums) {        // Write your code here        int temp = 0, a = 0;        for (int i = 0; nums[i] == 0; i++){            a = nums[i];            for (int j = i + 1; nums[j] != 0; j++) {                temp = a;                a = nums[j];                nums[j] = temp;                i++;            }        }    }};

写出来的代码竟然 Runtime Error 超时;

网上参考别人的代码
思路:
1.首先确定right——-指向的是最右端不为零的数的下标;

2.从右向左依次迭代.

class Solution {public:    /**     * @param nums an integer array     * @return nothing, do this in-place     */    void moveZeroes(vector<int>& nums) {        // Write your code here        int len = nums.size();        int right = 0;        for (int i = len-1; i >= 0; i--) {            if (i >= 0 && nums[i] != 0) {                right = i;                break;            }        }        for (int i = right; i >= 0; i--) {            if (nums[i] == 0) {                for (int j = i; j < right; j++) {                    swap(nums[j], nums[j+1]);                }                right--;            }        }        return;    }};

顺利通过;

原创粉丝点击