Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
For example,
Given input array nums = [1,1,2]
,
Your function should return length = 2
, with the first two elements of nums being 1
and 2
respectively. It doesn't matter what you leave beyond the new length.
解法一:
使用c++自带的hash函数unordered_map去判断element的值是否重复。如果重复,擦除vector中元素并更新hash table以及当前index。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
unordered_map<int, int> hash_table;
for(int i=0; i<nums.size(); i++){
if(hash_table[nums[i]]++>0){
nums.erase(nums.begin()+i);
i--;
}
}
return nums.size();
}
};