Description
Given a sorted array nums, 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 by modifying the input array in-place with O(1) extra memory.
Example 1:
Given 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 returned length.
1. Map | 一个key对应一个value
map的特性使其只能拥有独一无二的keys,那么也就让它成为了这道题的perfect tool。利用map的size很容易就能获得vector中没有重复的数字个数,同时,不断地用size来更改vector里面的信息。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
map<int,bool> stat;
for (size_t i = 0; i < nums.size(); i++) {
if (stat.find(nums[i]) == stat.end()) {
//not in map --> add to map
stat.insert(make_pair(nums[i],true));
nums[stat.size()-1] = nums[i];
}
}
return stat.size();
}
};
2. Pointers | 请想象两个指针
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.size() == 0) {
return 0;
}
int j = 0;
for (int i = 1; i < nums.size(); i++) {
if (nums[j] != nums[i]) {
j++;
nums[j] = nums[i];
}
}
return j+1;
}
};