题目链接:283. 移动零 - 力扣(LeetCode)
思路: 分为两个阶段,第一个阶段按序遍历数组,将非零元素放在数组前面;第二个阶段将剩余位置填充为0。
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int index=0;//指向非零元素
for(int i=0;i<nums.size();i++){
if(nums[i]!=0) nums[index++]=nums[i];
}
//填充0
for(int i=index;i<nums.size();i++){
nums[i]=0;
}
}
};
- 时间复杂度:O(n)
- 空间复杂度:O(1)
思考: 本质依然是双指针,第一个循环中的index可看成慢指针,指向非零元素,i可看作快指针,遍历所有元素。