移除元素

发布时间 2024-01-09 10:32:53作者: LiviaYu


移除元素就没啥可说的了,主要是双指针法的使用

27

int removeElement(vector<int>& nums, int val) {
        int n=nums.size();
        int slowptr=0;
        for(int fastptr=0;fastptr<n;fastptr++)
        {
            //遇到不等于val的元素,就说明数组的大小应该+1了
            //用slowptr来表示数组大小
            if(nums[fastptr]!=val)
            {
                nums[slowptr]=nums[fastptr];
                slowptr++;
            }
            //如果等于val,就只是fastptr向后移动
        }
        return slowptr;

    }

26

和上一题差不多,如果要移除相同的元素,那么就检验他是否和上一个元素相同,如果不等于就进行逻辑

int removeDuplicates(vector<int>& nums) {
        int n=nums.size();
        int slowptr=1;
        if(n==0)
        {
            return 0;
        }
        for(int fastptr=1;fastptr<nums.size();fastptr++)
        {
            if(nums[fastptr]!=nums[fastptr-1])
            {
                nums[slowptr]=nums[fastptr];
                slowptr++;
            }
        }
        return slowptr;

    }

80

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

int removeDuplicates(vector<int>& nums) {
        int n=nums.size();
        //显然2以下不可能重复出现2次,所以直接返回
        if(n<=2)
        {
            return n;
        }
        int slowptr=2;
        for(int fastptr=2;fastptr<n;fastptr++)
        {
            //问题出现在这里,这里是检查slowptr-2是否和fastptr的相等,而不是fastptr-2
            if(nums[fastptr]!=nums[slowptr-2])
            {
                nums[slowptr]=nums[fastptr];
                slowptr++;
            }
            
        }
        return slowptr;

    }

283

void moveZeroes(vector<int>& nums) {
        int n=nums.size();
        int slowptr=0;
        for(int fastptr=0;fastptr<n;fastptr++)
        {
            if(nums[fastptr]!=0)
            {
                nums[slowptr]=nums[fastptr];
                slowptr++;
            }
        }
        for(int i=slowptr;i<n;i++)
        {
            nums[i]=0;
        }
    }

977

vector<int> ans(nums.size());
        int start=0;
        int end=nums.size()-1;
        int ptr=end;
        while(start<=end)
        {
            if(abs(nums[start])>abs(nums[end]))
            {
                ans[ptr]=nums[start]*nums[start];
                start++;
            }
            else
            {
                ans[ptr]=nums[end]*nums[end];
                end--;
            }
            ptr--;
        }
        return ans;
    }