leetcode: 283. Move Zeroes

来源:互联网 发布:blackrock知乎 编辑:程序博客网 时间:2024/06/18 12:45

题目描述:

题目链接:https://leetcode.com/problems/move-zeroes/description/

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].

给出一个数组,将所有的零移到数组末尾,非零的数保持顺序不变。

Note:

  1. You must do this in-place without making a copy of the array.
  2. Minimize the total number of operations.
要求:必须原地转换,不能创建数组

题目解析:
题目很简单,要求原地转换。这时候考虑很多排序算法都是原地转换,可以参考一下。我是用了快慢指针的思想,慢指针指向前面的非零数的指示数,快指针去搜寻后面的非零数。然后两个指针交换。结果16ms. 代码如下:

class Solution {public:    void moveZeroes(vector<int>& nums) {        int l = 0;        int f = 0;        while(f<nums.size())        {            if(nums[f]!=0)            {                int a = nums[l];                nums[l] = nums[f];                nums[f] = a;                l++;                f++;            }            else                f++;        }            }};


原创粉丝点击