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 ofnums being 1
, 1
, 2
, 2
and3
. It doesn't matter what you leave beyond the new length.
题意:移除排序数组中的重复元素,一个元素最多出现两次
分类:数组,双指针
解法1:和leetcode- - Remove Duplicates from Sorted Array 一样,使用双指针,但是每次覆盖时,判断是否由两个以上重复,如果是,覆盖两次,否则覆盖一次
public class Solution { public int removeDuplicates( int [] nums) { int cur = Integer.MIN_VALUE; int count = 0 ; int sum = 0 ; for ( int i= 0 ;i<nums.length;i++){ if (cur==nums[i]){ if (count== 1 ){ nums[sum] = nums[i]; count++; sum++; }else { count = 0 ; cur = nums[i]; } }else { cur = nums[i]; nums[sum] = nums[i]; sum++; count = 1 ; } } return sum; } }
public class Solution { public int removeDuplicates( int [] nums) { int count = 0 ; int len = nums.length; if (len== 0 ) return 0 ; int pre = 0 ; int cur = 0 ; while (cur<len){ if (nums[cur]==nums[pre]){ cur++; }else { nums[count++] = nums[pre]; if (cur-pre>= 2 ){ nums[count++] = nums[pre]; } pre = cur; } } nums[count++] = nums[cur-1 ]; if (cur-pre>= 2 ){ nums[count++] = nums[cur-1 ]; } return count; } }
原文链接http://blog.youkuaiyun.com/crazy__chen/article/details/46425475