您的位置:首页 > 职场人生

leetcode之move zeros

2016-01-19 19:59 183 查看
题目:

Given an array 
nums
, write a function to move all 
0
's
to the end of it while maintaining the relative order of the non-zero elements.

For example, given 
nums = [0, 1, 0, 3, 12]
, after calling your function, 
nums
 should
be 
[1, 3, 12, 0, 0]
.

解答:

可以先用几个例子来模拟操作,假设i为0部分的头

可以发现只需要将i位置和当前出现的非0的位置进行交换,然后将i++即可

如例子 [1,2,3,0,5]

初始化i为0,发现1非0,将i和0位置的交换,然后i++,以此类推到达和3交换完以后,i变为3,遇见0,跳过,然后遇见5,将5和位置3进行交换,就得到了最终结果

而且不可能出现015,此时在处理5但是i等于0的情况,也就是说当前处理的位置和0部分的起点之间一定已经全部都是0

class Solution {

public: 

    void moveZeroes(vector<int>& nums) {

        int size = nums.size();

        int zero_start = 0;

        for(int i = 0;i < size; ++i)

        {

            if(nums[i] == 0)

                continue;

            else

            {

                int tmp = nums[i];

                nums[i] = nums[zero_start];

                nums[zero_start] = tmp;

                zero_start++;

            }

        }

    }

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 面试 算法