LeetCode 283.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.
分析:
这道题很简单,可以利用vector标准库中的erase和push_back函数即可解决。
首先,定义cnt为0,用来标记已经循环遍历的个数,因为我们不断push_back,vector的长度其实是不变的,所以用cnt来判断是否退出循环。
然后,循环遍历vector,当遇到数为0的情况时,用erase函数将其删除,然后用push_back函数在末尾加上0即可。
这里要注意的是erase函数,因为iterator erase (const_iterator position);
,说明vector.erase()接收一个迭代器的参数,然后返回值依然是迭代器,所以要按代码那样写,才能避免出现野指针的问题。
代码如下:
1 |
|