E283.移动零
stack, two pinters, https://leetcode.cn/problems/move-zeroes/
思路:双指针处理即可,主要是考虑到各自的位置进行swap
cpp
class Solution {
public:
void moveZeroes(vector<int>& nums) {
//要保证相对顺序不变 双指针来记录
//左指针指向处理好的尾部 右指针指向待处理的头部
//要实现把0都放到最后面 只需要每次左指针指向处理好的第一个0,右指针把非0转移即可
int l=0;
int r;
for(r=0;r<nums.size();r++){
if(nums[r]!=0){
swap(nums[l],nums[r]);
l++;
}
}
}
};思路:只需要将0放到最后即可
cpp
class Solution
{
public:
void moveZeroes(vector<int>& nums)
{
int n = nums.size();
vector<int> temp;
for (int i = 0; i < n; i++)
{
if (nums[i] != 0)
temp.push_back(nums[i]);
}
for (int i = 0; i < n; i++)
{
if (i < temp.size())
nums[i] = temp[i];
else
nums[i] = 0;
}
}
};