26.删除排序数组中的重复项
自己的方法
也是用了双指针的方法。但是细节很差
class Solution {
public int removeDuplicates(int[] nums) {
int i=1;
for(int j =1;j<nums.length;j++){
if(j!=nums.length){
if(nums[j]!=nums[j-1]){
nums[i]=nums[j];
i++;
}
}
}
return i;
}
}
官方双指针解法
class Solution {
public int removeDuplicates(int[] nums) {
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;
}
}
1.首先是没有对数组长度的报错考虑
2.通过i和j的指针对比,慢指针储存的就是最后一个正确重复的数字,快指针直接与慢指针作对比即可。
3.且i++的位置提前,也解决了我之前考虑的用j-1的数组长度限制等问题,i的初始值问题也解决了
4.注意最后返回值i+1