80.Remove Duplicates from Sorted Array II

你快乐吗?

Posted by bbkgl on September 26, 2019

80.Remove Duplicates from Sorted Array II


98.65%,参考了评论区大佬的解法,在这里给解释一下各个步骤和变量的含义:

  • len表示的是删除重复元素后新序列的长度,同时也表示新元素进入新序列的索引;
  • i就是循环变量,用于遍历整个旧序列;
  • if (len < 2) nums[len++] = nums[i];的意思就是如果新序列的长度小于2(即新序列中不会存在两个相同的元素,这时候i位置所在元素不会和新序列中的元素相同),直接将新元素加入到新序列中,并更新新序列的长度;
  • if (nums[i] != nums[len-2]) nums[len++] = nums[i];的意思就是如果新元素加入后不会和前两个元素构成3个相同的元素(nums[len-2]就是直接取新序列中倒数第二个元素,如果该元素和新元素相同,说明加入后会构成3个相同的元素,显然是不符合题意的),就将新元素加入到新序列中,并更新新序列的长度;
  • 题意只要求将新序列紧挨在一起就行,多出的长度将不参与评测;
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int len = 0;
        for (int i = 0; i < nums.size(); i++) {
            if (len < 2 || nums[i] != nums[len-2])
                nums[len++] = nums[i];
        }
        return len;
    }
};