题目描述:
解题思路:
这道题的意思就是不开新的数组,然后在原数组上面改变,把重复的元素去掉,最后返回值是不重复的总共个数,题目在判断的时候,不仅会判断返回的数值正确与否还会判断数组是否正确的改变。
可以使用双指针做。i、j分别是指针,指向0和1,j不断移动,当j移动到和i不相等的时候,就将i+1的位置变成不相等的j的位置,也就是j先在前面不停的寻找,i在后面相应的变。最后i+1就是所以不相等的元素个数。
我自己写的双指针太烂了,不好判断不重复的个数。还又写了一个Hashset来判断个数。
public int removeDuplicates(int[] nums) {
int j = 0;
int res = 0;
HashSet<Integer> set=new HashSet<>();
for (int i = 0; i < nums.length; i++) {
set.add(nums[i]);
}
for (int i = 0; i < nums.length - 1; i++) {
res = i;
while (j < nums.length && nums[j] == nums[i])
j++;
if (j == nums.length)
break;
nums[i + 1] = nums[j];
}
return set.size();
}
优化后的代码:
public int removeDuplicates2(int[] nums) {
int i=0,j=1;
while (j<nums.length)
{
if(nums[i]==nums[j])
{
j++;
}
else
{
nums[++i]=nums[j];
}
}
return i+1;
}