Leetcode Note: Go - Contains Duplicate II

Contains Duplicate II - LeetCode
https://leetcode.com/problems/contains-duplicate-ii/

  • Go 言語で取り組んだメモ

所感

  • 問題文が理解できない・・・
  • int 配列 nums と int 数値 k が引数として渡される
  • nums[i] == nums[j] かつ abs(i - j) <= k になる 2つ の異なるインデックス i, j が配列中に存在する場合に true を返す
    • nums[i] == nums[j]
      • これよくわからず
      • i と j は重複しない任意のインデックスということかな
    • abs(i - j) <= k は math の abs かな

回答

Go: map solution - LeetCode Discuss
https://leetcode.com/problems/contains-duplicate-ii/discuss/548864/Go%3A-map-solution

func containsNearbyDuplicate(nums []int, k int) bool {
	m := map[int]int{}
	for i, num := range nums {
		if j, ok := m[num]; ok && (i-j) <= k {
			return true
		}
		m[num] = i
	}
	return false
}
  • m: 既出の数値か確認する map
  • nums をループ
    • m[num] に値が入っている AND i - j <= k なら return true
      • j = m[num] という代入をしてから計算するので map は int, int で管理している
        • シンプルに既出かどうかのステート管理だったら int, bool のほうが個人的には好み
    • m[num] = i