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 =
Your function should return length =
It doesn't matter what you leave beyond the new length.
自己的思路是通过linkedhashmap存储每个元素出现的次数,当出现大于2时长度减一,然后遍历map赋值返回length。
网上看到一个巧妙的解法,
题意为允许一个重复,所以判断就不是相邻而是相隔一个的数字是否不一样。
不一样就需要更新值,但注意到这题更新数组不能是当前的状态,而需要是更新前一个不同的数,用temp存当前值以便于下一次赋值。
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,
2and
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 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解