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 もできる