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 かな- https://pkg.go.dev/math#example-Abs
- 絶対値を計算する関数
- なので、要は i - j が引数 k より小さいことを判定すれば良さそう
回答
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]
に値が入っている ANDi - j <= k
なら return truej = m[num]
という代入をしてから計算するので map は int, int で管理している- シンプルに既出かどうかのステート管理だったら int, bool のほうが個人的には好み
m[num] = i