
纠结要不要离开杭州
删除数组中的重复元素
双指针/快慢指针
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 2024-07-17 10:15:36 +08:00 「纠结要不要离开杭州」 啥意思 |
3 jackwaycn 2024-07-17 11:19:25 +08:00 得 v2 成笔记站了 |
4 JiangNanLong 2024-07-17 11:31:16 +08:00 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 2024-07-17 13:46:34 +08:00 都是套路,没有啥技巧。不过对提升 coding 能力和面试确实有用 |
6 NullPointerExce OP @JiangNanLong 判断这一行的目的是,如果一个数组是[1,2,3,4,5,6],本来不需要做任何操作,但是如果不判断 q-p>1 ,就要做一遍无用功。 |
7 NullPointerExce OP @biutcoder 正解 |
8 NullPointerExce OP @piecezzz 如果不是为了面试,多刷一会儿抖音不香吗 |
9 yoyolichen 2024-07-17 15:13:24 +08:00 忘了加"有序" |