Given an array of integers, remove the duplicate numbers in it.
You should:
- Do it in place in the array.
- Move the unique numbers to the front of the array.
- Return the total number of the unique numbers.
Notice
You don't need to keep the original order of the integers.
Have you met this question in a real interview?
Yes
Example
Givennums=[1,3,1,4,4,2], you should:
- Move duplicate integers to the tail of
nums
=
>
nums
=
[1,3,4,2,?,?]. - Return the number of unique integers in
nums
=
>
4.
Actually we don't care about what you place in?, we only care about the part which has no duplicate integers.
- Do it in O(n) time complexity.
- Do it in O(nlogn) time without extra space.
class Solution {
public:
/**
* @param nums an array of integers
* @return the number of unique integers
*/
int deduplication(vector<int>& nums) {
// Write your code here
if (nums.empty()) {
return 0;
}
sort(nums.begin(), nums.end());
int index = 0;
for (int num : nums) {
if (num != nums[index]) {
nums[++index] = num;
}
}
return index + 1;
}
};