其实这个题目有一个关键就是sorted array
如果不是sorted的话 可以用array index bit的类似方法解决这个问题
Remove duplicates from sorted array 1
1. Do not allocate extra space for another array, you must do this in place with constant memory.
2.Each element appear only once and return the new length.
solution 1.
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
//首先是corner case 当数组有0或1的元素的时候,什么都不用做 就是本身
if (nums.size() < 2)
{
return nums.size();
}
// 1.这里是关键, 因为要求是element only once所以默认第一个就不用看了从第二个元素开始,同时nums[j++] = nums[i]; 而不是 = nums[i-1];
int i = 1;
int j = 1;
while (i < nums.size())
{
if (nums[i - 1] != nums[i])
{
nums[j++] = nums[i];
}
++i;
}
return j;
}
};
对比这个不是从第二个元素开始的方法solution 2.
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.size() < 2)
{
return nums.size();
}
int i = 0;
int j = 0;
while (i < nums.size() - 1)
{
if (nums[i + 1] != nums[i])
{
nums[j++] = nums[i];
}
++i;
}
//这里是关键 因为无论之前是不是duplicated,都要加上最后的元素
nums [j++] = nums[i];
return j;
}
};