【leetcode】双指针:移动零 and 复写零
文章目录
- 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--;
}
}
}
};