纠结要不要离开杭州
删除数组中的重复元素
双指针/快慢指针
p 指针是慢指针,q 指针是快指针,当 p 和 q 指向的元素相同的时候,q 指针继续向后移动,直到元素不相等,然后将 q 指针指向的元素复制给 p 的下一个元素(之所以是下一个,q 一直在向后移动,注意向后移动的前提是元素相同,那么就是覆盖掉相同的元素),同时 p 指针向后移动一个位置。
p 和 q 之间应该隔一个元素,
便利数组,用 while 循环
class Solution {
public int removeDuplicates(int[] nums) {
int p = 0;
int q = 1;
while(q < nums.length){
if(nums[p] != nums[q]){
if((q-p) > 1){
nums[p+1] = nums[q];
}
p++;
}
q++;
}
return p+1;
}
}
p 是从 0 开始的,所以要返回 p+1 才是新数组的长度
1
horizon 52 天前
「纠结要不要离开杭州」
啥意思 |
3
jackwaycn 52 天前
得 v2 成笔记站了
|
4
JiangNanLong 52 天前
public int removeDuplicates(int[] nums) {
int p = 0; int q = 1; while(q < nums.length){ if(nums[p] != nums[q]){ nums[++p]=nums[q]; } q++; } return p+1; } 这么写就行吧,不需要判断 q-p>1 吧 |
5
piecezzz 52 天前
都是套路,没有啥技巧。不过对提升 coding 能力和面试确实有用
|
![]() |
6
NullPointerExce OP @JiangNanLong 判断这一行的目的是,如果一个数组是[1,2,3,4,5,6],本来不需要做任何操作,但是如果不判断 q-p>1 ,就要做一遍无用功。
|
![]() |
7
NullPointerExce OP @biutcoder 正解
|
![]() |
8
NullPointerExce OP @piecezzz 如果不是为了面试,多刷一会儿抖音不香吗
|
![]() |
9
yoyolichen 52 天前
忘了加"有序"
|