文章目录
- 1.移动零
- 2.复写零
1.移动零
class Solution {
public:void moveZeroes(vector<int>& nums) {for (int cur = 0, dest = -1; cur < nums.size(); cur++)if (nums[cur] != 0)swap(nums[++dest], nums[cur]);}
};
class Solution {
public:void moveZeroes(vector<int>& nums) {int cur = 0, dest = -1, n = nums.size();while(cur < n){if(nums[cur]){swap(nums[cur++], nums[++dest]);}else{cur++;}}}
};
2.复写零
class Solution
{
public:void duplicateZeros(vector<int>& nums) {int cur = 0, dest = -1, n = nums.size();while(cur < n){if(nums[cur]) dest++;else dest += 2;if(dest >= n - 1) break;cur++; }if(dest == n){nums[n - 1] = 0;cur--; dest -= 2;}while(cur >= 0){if(nums[cur]){nums[dest--] = nums[cur--];}else{nums[dest--] = 0;nums[dest--] = 0;cur--;}}}
};