LeetCode 283移动零Easy
-
题目简述:给定一个数组
nums
,编写一个函数将所有0
移动到数组的末尾,同时保持非零元素的相对顺序。必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。 -
输入:[0,1,0,3,12] 输出:[1,3,12,0,0]
-
思路:双指针两次遍历(覆盖)
重新定义用于下标刷新原数组,将非0值按顺序加入数组,最后根据下标值与原始数组长度差值加入0值
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int idx = 0;
for(auto &x : nums)
{
if(x != 0) nums[idx++] = x;
}
while(idx < nums.size())
nums[idx++] = 0;
}
};
-
思路二:双指针一次遍历(交换)
用
0
当做中间点,把不等于0的放到中间点的左边,等于0的放到其右边。
class Solution {
public:
void moveZeroes(vector<int>& nums) {
if(nums.empty()) return;
int slow = 0, fast = 0;
while(fast < nums.size())
{
if(nums[fast] != 0)
{
swap(nums[slow], nums[fast]);
slow++;
}
fast++;
}
}
};
终于100题!!!