LeetCode 283 移动零
https://leetcode-cn.com/problems/move-zeroes/
法一 双指针
只要找到了非零元素就将其往数组前面放,数组剩余部分赋值为0
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int k = 0;
int sz = nums.size();
for (int i = 0; i < sz; ++i) {
if (nums[i] != 0)
nums[k++] = nums[i];
}
while (k < sz) { nums[k++] = 0; }
}
};
法二 双指针
指针k
指向当前已经处理好的序列的尾部,指针i
指向待处理序列的头部。指针i
不断向右移动,每当i
指向了非零数,则将i
和k
所指向的数交换,同时将两指针往右移动一位。
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int sz = nums.size();
int k = 0, i = 0;
for (i = 0; i < sz; ++i) {
if (nums[i] != 0) {
swap(nums[k], nums[i]);
++k;
}
}
}
};