タイトル:Leetcode-01 - 重複項の削除
日付:2022 年 2 月 12 日 22:23:13
目次:あり
カテゴリー:
- leetcode
タグ: - leetcode
- 削除
- ソート
- 配列
- 重複項
問題を解決するために、2 つのポインタ(slow スローポインタと fast ファストポインタ)を使用します。ファストポインタは配列を走査するためのインデックス位置を示し、スローポインタは次の異なる要素を入れるためのインデックス位置を示します。初期状態では、2 つのポインタはインデックス 1 を指します。
問題文によれば、渡される配列 nums は昇順に並んでいるということです。
nums の長さを n とすると、ファストポインタ fast は 1 から n-1 まで走査します。各位置について、
もし nums [fast] != nums [fast-1] であれば、nums [fast] と前の要素は異なることを意味します。
したがって、nums [fast] を nums [slow] の位置に移動し、slow の値を 1 増やします。つまり、次の位置を指します。
走査が終了すると、nums [0] から nums [slow-1] までの要素はすべて異なり、元の配列のすべての異なる要素を含んでいるため、新しい配列の長さは slow です。slow を返すだけです。
func removeDuplicates(nums []int) int {
if 0 == len(nums) {
return 0
}
slow := 1
for fast := 1; fast < len(nums); fast++ {
if nums[fast] != nums[fast-1] {
nums[slow] = nums[fast]
slow++
}
}
return slow
}
参考資料#
- 元の問題のリンク:26. 删除有序数组中的重复项 - 力扣(LeetCode)