banner
biuaxia

biuaxia

"万物皆有裂痕,那是光进来的地方。"
github
bilibili
tg_channel

Leetcode-01-重複項の削除

タイトル: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
}

image.png

参考資料#

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。