LeetCode 笔记
LeetCode 随心记录
一个地方记录 LeetCode
LeetCode 随心记录
一个地方记录 LeetCode
LeetCode 26 题的双指针解法:用快慢指针原地去重有序数组,附逐步推演表格与 Java 实现。
题目地址:https://leetcode.com/problems/remove-duplicates-from-sorted-array/
使用快慢指针来记录遍历的坐标。
| 数组下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| 数组 | 0 | 0 | 1 | 1 | 1 | 2 | 2 | 3 | 3 | 4 |
| 快指针 | 0 | |||||||||
| 慢指针 | 0 |
初始时
| 数组下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| 数组 | 0 | 0 | 1 | 1 | 1 | 2 | 2 | 3 | 3 | 4 |
| 快指针 | 1 | |||||||||
| 慢指针 | 0 |
两个指针指的数字相同,则快指针向前走一步
| 数组下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| 数组 | 0 | 0 | 1 | 1 | 1 | 2 | 2 | 3 | 3 | 4 |
| 快指针 | 2 | |||||||||
| 慢指针 | 0 |
当2个指针对应的值不相同时
| 数组下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| 数组 | 0 | 1 | 1 | 1 | 1 | 2 | 2 | 3 | 3 | 4 |
| 快指针 | 2 | |||||||||
| 慢指针 | 1 |
慢指针前进一步,将当前的值换成快指针所在值
接下来的步骤就是如上这般,最终的结果:
| 数组下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| 数组 | 0 | 1 | 2 | 3 | 4 | 2 | 2 | 3 | 3 | 4 |
| 快指针 | 9 | |||||||||
| 慢指针 | 4 |
最终结果
class Solution { public int removeDuplicates(int[] nums) { int length = nums.length ; int lowPoint = 0 ; for(int fastPoint = 0 ; fastPoint < length ; fastPoint++){ if(nums[fastPoint] != nums[lowPoint] ){ lowPoint ++ ; nums[lowPoint] = nums[fastPoint]; } } return lowPoint + 1 ; }}