6362. 合并两个二维数组 - 求和法

129 阅读1分钟

题目:
给你两个 二维 整数数组 nums1nums2.

  • nums1[i] = [idi, vali] 表示编号为 idi 的数字对应的值等于 vali
  • nums2[i] = [idi, vali] 表示编号为 idi 的数字对应的值等于 vali

每个数组都包含 互不相同 的 id ,并按 id 以 递增 顺序排列。

请你将两个数组合并为一个按 id 以递增顺序排列的数组,并符合下述条件:

  • 只有在两个数组中至少出现过一次的 id 才能包含在结果数组内。
  • 每个 id 在结果数组中 只能出现一次 ,并且其对应的值等于两个数组中该 id 所对应的值求和。如果某个数组中不存在该 id ,则认为其对应的值等于 0

返回结果数组。返回的数组需要按 id 以递增顺序排列。
算法:
方法一:模拟
数组中不包含相同的id,简化了题目

func mergeArrays(nums1 [][]int, nums2 [][]int) [][]int {
    ans := make([][]int, 0)
    i, j := 0, 0
    for ; i < len(nums1) && j < len(nums2);  {
        id := min(nums1[i][0], nums2[j][0])
        item := []int{id, 0}
        if id == nums1[i][0] {
            item[1] = item[1] + nums1[i][1]
            i ++
        }
        if id == nums2[j][0] {
            item[1] = item[1] + nums2[j][1]
            j ++
        }
        ans = append(ans, item)
        
    }
    if i < len(nums1) {
        ans = append(ans, nums1[i:]...)
    }    
    if j < len(nums2) {
        ans = append(ans, nums2[j:]...)
    }  
    return ans
}

func min(a, b int) int {
    if a < b {
        return a
    }
    return b
}