题目描述:
题目链接: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:
- You must do this in-place without making a copy of the array.
- 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++;
}
}
};