Create 80. Remove Duplicates from Sorted Array II.md

This commit is contained in:
唐树森 2019-03-09 15:20:46 +08:00 committed by GitHub
parent b7126c7e7b
commit bc7406eef5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -0,0 +1,32 @@
# [80. Remove Duplicates from Sorted Array II](https://leetcode.com/problems/remove-duplicates-from-sorted-array-ii/)
# 思路
要求去除有序数组中的重复元素,每个元素最多允许出现两次,要求不使用额外空间。
从前往后遍历数组用len记录当前已去除重复元素后数组的元素个数再用times记录当前已去除重复元素后数组的最后一个元素即`nums[len - 1]`)的出现次数。则分成两种情况:
* 若当前元素不等于当前去除重复元素后的最后一个元素,即`nums[i] != nums[len - 1]`说明当前元素不应该丢弃则应该将times更新为1
然后还要更新len及nums[len]
* 否则,如果`times == 1`说明之前才出现一次则此次重复满足要求则更新time为2再更新len及nums[len]。
时间复杂度O(n), 空间复杂度O(1)
# C++
``` C++
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int size = nums.size();
if(size < 3) return size;
int len = 1, times = 1;
for(int i = 1; i < size; i++){
if(nums[i] != nums[len - 1]) {
times = 1;
nums[len++] = nums[i];
}
else if(times == 1){
nums[len++] = nums[i];
times = 2;
}
}
return len;
}
};
```