还是快慢指针,看了答案,感觉对快慢指针还是不够熟悉,在去除重复数字题目中很快就想到了,但是这一题没有做出来,思路就是:
快指针和慢指针同步往后走,找到0后慢指针指向了0的位置,快指针会继续往后移动,直到找到一个不为零的数,慢指针的值就会和快指针的值交换,慢指针往后移动一步,还是会指向0的值,当快指针到达尾部,完成了0值后移,同时没有改变非零值的顺序
class Solution { public: void moveZeroes(vector<int>& nums) { if (nums.empty()) { return; } int slow_pos = 0; for (int i = 0; i < nums.size(); i++) { if (nums[i] != 0) { swap(nums[slow_pos++], nums[i]); } } } };