您的位置:首页 > 其它

leetcode80 Remove Duplicates from Sorted Array II

2016-06-15 21:33 387 查看
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.

    自己的思路是通过linkedhashmap存储每个元素出现的次数,当出现大于2时长度减一,然后遍历map赋值返回length。

public int removeDuplicates(int[] nums) {
int length=nums.length;
Map<Integer,Integer> map=new LinkedHashMap<>();
for(int i=0;i<nums.length;i++)
{
if(map.get(nums[i])==null)
map.put(nums[i],1);
else if(map.get(nums[i])==1)
map.put(nums[i],2);
else if(map.get(nums[i])==2)
length--;
}
int k=0;
for(Integer i:map.keySet())
{
int num=map.get(i);

while(num-->0)
{
nums[k++]=i;
}
}
return length;
}

    网上看到一个巧妙的解法,

题意为允许一个重复,所以判断就不是相邻而是相隔一个的数字是否不一样。

不一样就需要更新值,但注意到这题更新数组不能是当前的状态,而需要是更新前一个不同的数,用temp存当前值以便于下一次赋值。

public int removeDuplicatesII(int[] nums)
{
if(nums.length==0) return 0;
if(nums.length==1) return 1;
int num=1,temp=nums[1];
for(int i=2;i<nums.length;i++)
{
if(nums[i]!=nums[i-2])
{
nums[num++]=temp;
temp=nums[i];
}
}
nums[num++]=temp;
return num;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode