
不能复制数组,必须原地操作,只能用双指针了。一个正常遍历数组,另一个记录最左侧0的下标。
cpp
class Solution {
public:
void moveZeroes(vector<int>& nums) {
vector<int> ans(nums.size(), 0);
int j = 0;
for(int i = 0;i<nums.size();i++){
if(nums[i]) ans[j++] = nums[i];
}
nums = ans;
}
};
更符合题意的答案:
cpp
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int j = 0;
for (int &i : nums) {
if (i) {
swap(i, nums[j]);
j++;
}
}
}
};