看了网上很多解析,都是使用的双指针,但是我自己使用的双指针跟大佬们的不一样,虽然代码量很少,但是时间复杂度很高…
分析:
- 设定 i 指针循环遍历整个数组,j 指针用于往前复制数组元素
- i 指针比对前后两个元素,若相同则启动 j 指针遍历循环使得数组元素前移
- 考虑的是当数组完成数组前移后, i 指针应该归位(i-- 和 i++)指向上次遍历的位置
- 当 i 指针到最大数值的时候,数组末尾全都是该数,不处理会使得遍历死循环,所以增加判断条件,当 i 指针指向的值跟数组最后一个值相等,那就退出遍历循环
代码:
class Solution {
public int removeDuplicates(int[] nums) {
int i;
for(i = 0; i < nums.length-1; i++)
{
//判断i指针是否指向最大的数
//跳出循环
if(nums[i] == nums[nums.length-1])
break;
//数组元素整体迁移
if(nums[i] == nums[i+1])
{
for(int j = i; j < nums.length-1; j++)
{
nums[j] = nums[j+1];
}
//用于i指针归位
i--;
}
}
return ++i;
}
}