原题
思路
- 双指针,左指针指向处理好的序列尾,右指针指向未处理的序列头,中间都是处理好的零。 右指针遇到非零数后,与左指针交换,两个指针都往后移,若遇到零,直接往后移,直至全部处理好了。
代码
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int n = nums.size();
int l = 0, r = 0;
while (r < n) {
if (nums[r]) {
swap(nums[l], nums[r]);
l++;
}
r++;
}
return;
}
};
运行截图
收获
- 双指针这个分类可以玩出很多花样,并不是一昧地数组首尾到中间相遇这种,还有快慢指针、处理好未处理这些等等…多学习多积累多实践