美文网首页
leetcode80&27 删除排序数组中的重复项 II&删除数

leetcode80&27 删除排序数组中的重复项 II&删除数

作者: dEADWOOD | 来源:发表于2019-08-03 14:16 被阅读0次

    被卡了N天,这题的要求很严格,既要求就地还要求只用O(1)空间还要求使用O(n)的时间

    很棒的思路,总的来说跟unique的实现差不多,区别在于unique往前看1个此题需要看2个,可以自然的推广到k个的情况

    解释一下代码含义
    i是扫描的index,k是填充的index
    前两个数自然什么都不用管直接填充即可,关键在于第3个数开始需要判断它是否跟k-2位置的数相等,如果和k-2位置的数相等,则意味着i和k-2和k-1位置的数都相等,需要放弃,否则就填充

    class Solution {
    public:
        int removeDuplicates(vector<int>& nums) {
            int k = 0;
            for(int i = 0; i < nums.size(); ++i)
                if(k < 2 or nums[i] != nums[k-2]) nums[k++] = nums[i];
            return k;
        }
    };
    
    

    同样的思路也可以用在27上,防止因为自己傻逼而挂掉

    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;
        }
    };
    

    这样的写法比起while写法 时间复杂度好也更不容易出错

    相关文章

      网友评论

          本文标题:leetcode80&27 删除排序数组中的重复项 II&删除数

          本文链接:https://www.haomeiwen.com/subject/pjsjdctx.html