leetcode-80-Remove Duplicates from Sorted Array II 顺序表
2016-11-02 09:35
519 查看
问题
题目:[leetcode-80]思路
本质和25,26一个思路。但是我第一遍没有过。说说我的问题,不是每次循环都有nums[i-k] = nums[i]的。这样的结果会导致[1,1,1]这样的测试用例过不去,因为output中包含了1这个元素。
所以,整体的逻辑分两部分。
重复元素累加k
非重复元素进行赋值
代码(c++实现)
class Solution { public: int removeDuplicates(vector<int>& nums) { int sz = nums.size(); int k = 0; map< int, int > mapper; for( int i = 0; i < sz; ++i ) { if( mapper.find( nums[i] ) == mapper.end() ) { mapper[nums[i]] = 1; nums[i-k] = nums[i]; } else if( 1 == mapper[ nums[i] ] ) { ++mapper[nums[i]]; nums[i-k] = nums[i]; } else ++k; } return sz-k; } };
上面是第一版的代码,看了看其他人的代码。觉得自己的代码只是解决了问题,但是没有更好的考察问题本省的特性。忽略了Sorted Array这一重要特性。因为元素是有序的,所以本质还是不需要增加一个hashmap的,其实一个变量就够了。
重复元素至多有两个,所以在原数组里面只要nums[i] != nums[i-2]就能保证这个元素不重复。但是,对于下面这组输入则不行。
Input:
[1,1,1,2,2,3]
Output:
[1,1,2,3]
Expected:
[1,1,2,2,3]
原因在于,原数组是会被修改的。所以原数组nums[i-2]的元素,在输出数组中应该是nums[i-2-k]这个元素。
代码1(c++实现)
class Solution { public: int removeDuplicates(vector<int>& nums) { int sz = nums.size(); int k = 0; for( int i = 2; i < sz; ++i ) { if( nums[i] != nums[i-2-k] ) nums[i-k] = nums[i]; else ++k; } return sz - k; } };
相关文章推荐
- LeetCode26/27/80/75 Remove Duplicates from Sorted Array I and II/Remove Element/Set Colors**
- leetcode 80: Remove Duplicates from Sorted Array II
- [LeetCode-80] Remove Duplicates from Sorted Array II
- leetcode-26&80 Remove Duplicates from Sorted Array I&II
- 【LEETCODE】80-Remove Duplicates from Sorted Array II [Python]
- leetcode[80] Remove Duplicates from Sorted Array II
- [leetcode-80]Remove Duplicates from Sorted Array II(C)
- LeetCode 80 Remove Duplicates from Sorted Array II
- LeetCode80——Remove Duplicates from Sorted Array II
- LeetCode(80) Remove Duplicates From Sorted Array II
- Leetcode_80_Remove Duplicates from Sorted Array II
- leetcode[80]:Remove Duplicates from Sorted Array II
- [leetcode 80] Remove Duplicates from Sorted Array II
- leetcode[80]Remove Duplicates from Sorted Array II
- LeetCode 80 Remove Duplicates from Sorted Array II
- LeetCode 80:Remove Duplicates from Sorted Array II
- leetcode-80 Remove Duplicates from Sorted Array II
- 80. Remove Duplicates from Sorted Array II LeetCode
- LeetCode(80) Remove Duplicates from Sorted Array II
- 【leetcode c++】80 Remove Duplicates from Sorted Array II