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,
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.
思路:end为当前non-duplicate array的end index,search_index 为已搜寻过的最后的element的index。利用swap来将duplicate移到array末尾,其速度应比用erase清除duplicate快。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int end = 1;
int search_index = 1;
int size = nums.size();
while(search_index < size) {
if (nums[end - 1] < nums[search_index])
{
//swap the elements
int temp = nums[end];
nums[end] = nums[search_index];
nums[search_index] = temp;
end++;
search_index++;
}
else {
search_index++;
}
}
return min(end, size);
}
};