方法一:
利用双指针将所有非零元素排列,然后将后面的位置补零。
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int slow = 0;
int fast = 0;
while (fast < nums.size()) {
if (nums[fast] != 0) {
nums[slow++] = nums[fast];
}
fast++;
}
while (slow < nums.size()) {
nums[slow++] = 0;
}
}
};
方法二:
每遇到0就将其与最近的非零元素交换。
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int left = 0;
int right = 0;
while (right < nums.size()) {
if (nums[right] != 0) {
swap(nums[left], nums[right]);
left++;
}
right++;
}
}
};