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