每日 LeetCode(第一天)

26. 删除有序数组中的重复项

/*
    双指针
    一个指针出去找不重复的,另一个指针在原地等待外出的指针传来数,最后返回原地指针就可以
    判断是否更改的条件就是:看外出指针跟在家指针是不是一样的 
                            如果不相等的话就传过来
                            不相等的话就接着找
*/
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if(nums.size() == 0) return 0; // 特判一下只存在一个的情况

        int k = 1; // 在家指针
        for(int i = 1;i<nums.size();i++) // 外出指针
            if(nums[i] != nums[i-1]) // 判断条件
                nums[k++] = nums[i];
        return k;
        
    }
};

27. 移除元素

/*
    双指针
    从头到尾判断一次,一个指针在待删元素,一个指针出去找下一个不待删元素
    判断条件:外出指针指的跟val不相等就可以
*/
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int k = 0; // 在家指针
        for(int i = 0;i<nums.size();i++) // 外出指针
            if(nums[i] != val) // 判断条件
                nums[k++] = nums[i];
        return k;
        
    }
};

80. 删除有序数组中的重复项 II

/*
    双指针
    跟今天的第一题一个思路
    因为最少可以存在两个,所以特判size<=2,让在家指针从第二个开始
    其他跟第一题思路一样
*/
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if(nums.size() <= 2) return nums.size();
        int k = 2;
        for(int i = 2;i<nums.size();i++)
            if(nums[i] != nums[k-1] || nums[i] != nums[k-2])
                nums[k++] = nums[i];
        return k;
    }
};
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值