LeetCode::移动零——初级算法

题目:

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]

输出: [1,3,12,0,0]

说明:

  1. 必须在原数组上操作,不能拷贝额外的数组。
  2. 尽量减少操作次数。

思路方法:

这道题我的思路比较直接,就是先找出输入数组中的非零元素。就是设置一个大小跟输入数组相等子新数组,然后把输入数组元素的值赋给新数组,接下来就把输入数组元素的值全部值为零,然后找出新数组中不为零的元素再赋值给输入数组,这时候的赋值需要保证是从输入数组的第一个位置开始。也就是再设置一个整型变量就可以了,初始值为0,被新数组赋值后才能加1。这个循环结束,输入数组即是本题答案。题目的要求也就是最后这能改变输入数组,才能AC。这个方法复杂度就很大了,比较low,后续想到简单的方法再加上。

代码如下:

class Solution {
public:
    void result(vector<int>& nums) {
        int n=nums.size();
        vector<int> s(n);
        int count=0;
        for(int i=0;i<n;i++)
        {
            s[i]=nums[i];
        }
        for(int i=0;i<n;i++)
        {
            nums[i]=0;
        }
        for(int i=0;i<n;i++)
        {
            if(s[i]!=0)
            {
                nums[count]+=s[i];
                count+=1;
            }
        }
    }
};

 

posted @ 2018-08-02 18:12  Serendipity-zsh  阅读(67)  评论(0)    收藏  举报