283.移动零

刷题笔记+-+283.移动零+be5bc16d-9504-40d6-b23e-6a2648a4d21a

  • 需要复习内容:快慢指针法
  • ☐ 记住时间和空间复杂度
  • [ ]
  • [ ]
  • 待办:
  • ☐ 查一下时间复杂度
  • ☐ 查一下空间复杂度
  • [ ]

解法一:模拟

遍历一遍将非零元素前移,使用k控制下标

并且遍历过程中将零元素的个数cnt找出来;

然后再for一遍将数组的后cnt个元素赋值0;完成;

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int cnt=0;
        int k=0;
        for(int i=0;i<nums.size();i++){
            if(nums[i]!=0){
                nums[k++]=nums[i];
            }
        }
        for(int i=k-1;k<nums.size();k++){
            nums[k]=0;
        }
    }
};

解法二:快慢指针

slow去寻找为0的位置,fast负责for遍历数组找不为0的地方,前提是slow<fast

然后双方都找到后进行swap

解决。

class Solution {
    public void moveZeroes(int[] nums) {
        int slow=0;
        int fast=0;
        for(fast=0;fast<nums.length;fast++){
            while(nums[slow]!=0&&slow<fast){
                slow++;
            }
            if(nums[fast]!=0){
                int tmp=nums[fast];
                nums[fast]=nums[slow];
                nums[slow]=tmp;
            }
        }
    }
}

posted @ 2024-03-06 11:06  nilbook  阅读(5)  评论(0编辑  收藏  举报