删除排序数组中的重复项
首先题目中说“给定一个排序数组” 即数组已经有序
其次需要原地删除重复的元素,在Java里面是不能在原地的情况下对数组进行删除,所以我猜测其判断提交答案是否正确的依据是,根据算法返回的数组长度len,去nums中截取前len个元素,即将后面不重复的元素复制到前面重复的元素,如:
{0,0,1,1,1,2,2,3}
转变后
{0,1,2,3,1,2,2,3}
这样的话就是对nums进行处理
双指针方法
两个指针i和j,当nums[i]==nums[j]时,将j++用来跳过重复的选项,当nums[j]!=nums[i]时,重复项就已经跳完了,而且还需要把非重复的项复制到前面去(上面已经解释过了),如此一直到j遍历完毕
if (nums.length == 0) return 0;
int i = 0;
for (int j = 1; j < nums.length; j++) {
if (nums[j] != nums[i]) {
i++;
nums[i] = nums[j];
}
}
return i + 1;
规则是用来被打破的。
—— 「机械公敌」