leetcode Move Zeroes
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中的元素删除,然后再在末尾插入就好。不过对于vector不熟悉的我,做起来还真是吃力哦。
补充一些vector的知识:
1.begin,end,rbegin,rend:如果begin与end的值相等,它们所表示的范围为空。
begin() 指向vector起始位置迭代器
end() 当前vector末尾元素的下一位置的迭代器
rbegin()指向末尾的下一位置,而其内容为末尾元素的值
rend()当前vector起始位置的逆迭代器
2.删除某一值的元素
erase函数:erase删除iterator指定的元素后返回的是该元素后的指针。所以我们删除元素要这样:erase(i++);或者i=erase(i);
3.用数组初始化vector
int int_array[] = {1, 2, 3, 4}; std::vector<int> vec_int(int_array, int_array+4);
1 class Solution { 2 public: 3 void moveZeroes(vector<int>& nums) { 4 int count=0; 5 for(vector<int>::iterator i=nums.begin();i!=nums.end();){ 6 if(*i==0) { 7 i=nums.erase(i); 8 count++;} 9 else i++; 10 if(i==nums.end()) break; 11 } 12 for(int j=0;j<count;j++) 13 { nums.push_back(0);} 14 } 15 };