LeetCode 26. 删除有序数组中的重复项
题目描述
思路分析
解法一:双指针原地覆盖(推荐)
核心思路:
slow指向已处理数组末尾,fast扫描数组。- 当
nums[fast] != nums[slow]时,写入nums[++slow]。- 最终长度为
slow + 1。
复杂度分析:
- 时间复杂度:O(n),其中 n 表示数组长度。
- 空间复杂度:O(1),仅使用常数额外空间。
class Solution {
public int removeDuplicates(int[] nums) {
if (nums.length == 0) {
return 0;
}
int slow = 0;
for (int fast = 1; fast < nums.length; fast++) {
if (nums[fast] != nums[slow]) {
slow++;
nums[slow] = nums[fast];
}
}
return slow + 1;
}
}
func removeDuplicates(nums []int) int {
if len(nums) == 0 {
return 0
}
slow := 0
for fast := 1; fast < len(nums); fast++ {
if nums[fast] != nums[slow] {
slow++
nums[slow] = nums[fast]
}
}
return slow + 1
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 27. 移除元素 | 简单 | 双指针 |
| 80. 删除有序数组中的重复项 II | 中等 | 双指针 |
| 283. 移动零 | 简单 | 双指针 |
| 26. 删除有序数组中的重复项 | 简单 | 双指针 |
| 88. 合并两个有序数组 | 简单 | 双指针 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
