题目:
Follow up for "Remove Duplicates":
What if duplicates are allowed at most twice?
For example,
Given sorted array nums = [1,1,1,2,2,3]
,
Your function should return length = 5
, with the first five elements of nums being 1
, 1
, 2
, 2
and 3
. It doesn't matter what you leave beyond the new length.
给定已排好序的数组,数组中允许每个元素最多出现两次,删除出现超过两次的部分,并返回新数组长度。
思路一:
与Remove Duplicates from Sorted Array题目类似,增加一个计数变量用来计数同一个元素出现的次数。
代码:20ms
class Solution { public: int removeDuplicates(vector<int>& nums) { if(nums.empty()){ return 0; } int index = 0; int count = 0; for(int i=1; i<nums.size(); i++){ if(nums[index]!=nums[i]){ nums[++index] = nums[i]; count = 0; }else if(nums[index]==nums[i] && count<1){ nums[++index] = nums[i]; count++; } } return index+1; } };思路二:
直接将相隔一个元素的两个元素相对比。
代码:16ms 时间复杂度最低
class Solution { public: int removeDuplicates(vector<int>& nums) { int n = nums.size(), count = 0; for (int i = 2; i < n; i++){ if (nums[i] == nums[i - 2 - count]){ count++; } else{ nums[i - count] = nums[i]; } } return n - count; } };代码:20ms
class Solution { public: int removeDuplicates(vector<int>& nums) { int i = 0; for (int n : nums) if (i < 2 || n > nums[i-2]) nums[i++] = n; return i; } };