算法|数组|26.删除有序数组中的重复项

2024/9/1 算法数组

# 题目

# 自解

# 思路分析

  1. 快指针读有序数组的值,慢指针给数组赋值
  2. 当快指针的值和慢指针下一个值不同时,慢指针给下一个值赋快指针的值

迷糊点:

  1. 不太会判断慢指针返回的值,有时候少1,有时候多1

# 代码实现

func removeDuplicates(nums []int) int {
  l := len(nums)
  if l == 0 {
    return 0
  }
  f := 1
  s := 0

  for f < l {
    if nums[s] != nums[f] {
    nums[s+1] = nums[f]
    s++
    }
    f++
  }
  return s+1
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 他解

# 思路分析

  1. 使用k作为唯一元素计数器
  2. 跳过首项,右比左的思路,比自解的思路好
  3. 同理,使用for循环避免了数组越界
  4. 感觉自解比较依赖于双指针,有时候单指针完全够了~

# 代码实现

func removeDuplicates(nums []int) int {
    k := 1
    for i := 1; i < len(nums); i++ {
        if nums[i] != nums[i-1] { // nums[i] 不是重复项
            nums[k] = nums[i] // 保留 nums[i]
            k++
        }
    }
    return k
}
1
2
3
4
5
6
7
8
9
10
Last Updated: 2024/11/22 17:43:46