Leetcode Note: Go - Intersection of Two Arrays II
Intersection of Two Arrays II - LeetCode
https://leetcode.com/problems/intersection-of-two-arrays-ii/
- Go 言語で取り組んだメモ
所感
- 2つ の数値配列のうち、 nums1 側で重複している数値を、個数も意識して return する
nums1 = [1,2,2,1], nums2 = [2,2]
であれば 2 が 2つ 重複しているので[2, 2]
を return するnums1 = [1,2,2,1], nums2 = [2]
であれば 2 が 2つ 重複しているので[2, 2]
を return する
回答
Go solution - LeetCode Discuss
https://leetcode.com/problems/intersection-of-two-arrays-ii/discuss/1774333/Go-solution
func intersect(nums1 []int, nums2 []int) []int {
index := 0
for i := 0; i < len(nums1); i++ {
for j := index; j < len(nums2); j++ {
if nums1[i] == nums2[j] {
nums1[index] = nums1[i]
nums2[index], nums2[j] = nums2[j], nums2[index]
index++
break
}
}
}
return nums1[:index]
}
- シンプルに二重ループすると個数のカウントも重複してしまう
- スコープの広い index 値を定義して、それをループに使いつつ break することで重複カウントを防げる
- かつ nums1 配列の前方でデータ管理することで、新しい配列も不要。エコ
nums1[:index]
のような記法で、配列の一部を良い感じに return もできる