diff --git a/solutions/80. Remove Duplicates from Sorted Array II.md b/solutions/80. Remove Duplicates from Sorted Array II.md new file mode 100644 index 0000000..aff1b5a --- /dev/null +++ b/solutions/80. Remove Duplicates from Sorted Array II.md @@ -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& 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; + } +}; +```