2023.5.25
题目描述:
一眼双指针,真香。 老样子,快指针 j 遍历原始数组寻找不等于0 的值,然后慢指针 i 维护新数组。 直接上代码:
class Solution {
public:
void moveZeroes(vector<int>& nums)
{
int n = nums.size();
int i = 0;//慢指针
int j = 0;//快指针
while(j < n)
{
if(nums[j] == 0)
{
j++;
}
else
{
nums[i++] = nums[j++];
}
}
while(i < n)
{
nums[i++] = 0;
}
}
};
2023.9.2
时隔三个月,二刷。 看到题目要求原地修改,即在原来的数组上进行修改,依然是想到了快慢指针,慢指针维护新的数组,快指针用来遍历旧数组。
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int slow = 0;
int fast = 0;
while(fast < nums.size())
{
if(nums[fast] == 0) fast++;
else
{
nums[slow] = nums[fast];
slow++;
fast++;
}
}
while(slow < nums.size())
{
nums[slow] = 0;
slow++;
}
}
};
隔了三个月代码风格还是有些许变化的😂。
2023.11.26
三刷。 java代码如下:
class Solution {
public void moveZeroes(int[] nums) {
int fast = 0;
int slow = 0;
while(fast < nums.length){
if(nums[fast] != 0){
int temp = nums[slow];
nums[slow] = nums[fast];
nums[fast] = temp;
fast++;
slow++;
}
else{
fast++;
}
}
}
}