长大后想做什么?做回小孩!

0%

LeetCode——删除排序数组中的重复项

NO.26 删除排序数组中的重复项 简单

lZCsTU.png

lZCrwT.png

思路一:双指针法 题目中给了两个关键点需要特别思考”原地”和”不需要考虑数组中超出新长度后面的元素”,所谓的”原地”就是不需要创建新的数组将不重复的元素复制过去,只需要在原数组中进行”覆盖”即可;所谓”不需要考虑数组中超出新长度后面的元素”就是只需要将不重复元素都”紧凑到原数组的前面”,如:[1,1,1,2,3,3,4,6]遵循上述两个点进行”覆盖”和”紧凑”的结果[1,2,3,4,6,3,4,6],算法的返回值为新长度5。

可以用两个指针i和j分别指向0号和1号元素,如果j指向的元素和i指向的元素相等就移动j指针,如果不相等则先移动i指针再让j指向的元素覆盖此时i指向的元素最后移动j指针,直至j指针遍历完所有元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
public int removeDuplicates(int[] nums) {
int len=nums.length;
if (nums==null||len==0)return 0;
int i=0;
for (int j=1;j<len;j++){
// 如果不相等,则先移动i指针再让j指向的元素覆盖此时i指向的元素
if (nums[i]!=nums[j]){
i++;
nums[i]=nums[j];
}
}
return i+1;
}

时间复杂度:O(n)


本人菜鸟,有错误请告知,感激不尽!

更多题解和学习记录博客:博客github