列表

详情


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

给你两个 二维 整数数组 nums1nums2.

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

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

返回结果数组。返回的数组需要按 id 以递增顺序排列。

 

示例 1:

输入:nums1 = [[1,2],[2,3],[4,5]], nums2 = [[1,4],[3,2],[4,1]]
输出:[[1,6],[2,3],[3,2],[4,6]]
解释:结果数组中包含以下元素:
- id = 1 ,对应的值等于 2 + 4 = 6 。
- id = 2 ,对应的值等于 3 。
- id = 3 ,对应的值等于 2 。
- id = 4 ,对应的值等于5 + 1 = 6 。

示例 2:

输入:nums1 = [[2,4],[3,6],[5,5]], nums2 = [[1,3],[4,3]]
输出:[[1,3],[2,4],[3,6],[4,3],[5,5]]
解释:不存在共同 id ,在结果数组中只需要包含每个 id 和其对应的值。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: vector<vector<int>> mergeArrays(vector<vector<int>>& nums1, vector<vector<int>>& nums2) { } };

java 解法, 执行用时: 1 ms, 内存消耗: 41.9 MB, 提交时间: 2023-02-20 22:58:23

class Solution {
    public int[][] mergeArrays(int[][] nums1, int[][] nums2) {
        int []temp=new int[1001];
        int res=0;
        for(int i=0;i<nums1.length;i++){
            if(temp[nums1[i][0]]==0)res++;
            temp[nums1[i][0]]+=nums1[i][1];
        }
        for(int i=0;i<nums2.length;i++){
            if(temp[nums2[i][0]]==0)res++;
            temp[nums2[i][0]]+=nums2[i][1];
        }
        int[][]ans=new int[res][2];
        int j=0;
        for(int i=0;i<temp.length;i++){
            if(temp[i]!=0){
                ans[j][0]=i;
                ans[j][1]=temp[i];
                j++;
            }
        }
        return ans;
    }
}

python3 解法, 执行用时: 40 ms, 内存消耗: 15.1 MB, 提交时间: 2023-02-20 22:57:59

class Solution:
    def mergeArrays(self, nums1: List[List[int]], nums2: List[List[int]]) -> List[List[int]]:
        tmp = [0] * 1001
        for x, y in nums1: tmp[x] += y
        for x, y in nums2: tmp[x] += y
        return [[idx, val] for idx, val in enumerate(tmp) if val]

python3 解法, 执行用时: 36 ms, 内存消耗: 15.2 MB, 提交时间: 2023-02-20 22:57:11

class Solution:
    def mergeArrays(self, A: List[List[int]], B: List[List[int]]) -> List[List[int]]:
        return list(sorted((Counter(dict(A)) + Counter(dict(B))).items()))

golang 解法, 执行用时: 4 ms, 内存消耗: 4.1 MB, 提交时间: 2023-02-20 22:56:36

func mergeArrays(a, b [][]int) (ans [][]int) {
	i, n := 0, len(a)
	j, m := 0, len(b)
	for {
		if i == n {
			return append(ans, b[j:]...)
		}
		if j == m {
			return append(ans, a[i:]...)
		}
		if a[i][0] < b[j][0] {
			ans = append(ans, a[i])
			i++
		} else if a[i][0] > b[j][0] {
			ans = append(ans, b[j])
			j++
		} else {
			a[i][1] += b[j][1]
			ans = append(ans, a[i])
			i++
			j++
		}
	}
}

python3 解法, 执行用时: 24 ms, 内存消耗: 15 MB, 提交时间: 2023-02-20 22:55:51

# 归并排序
class Solution:
    def mergeArrays(self, a: List[List[int]], b: List[List[int]]) -> List[List[int]]:
        ans = []
        i, n = 0, len(a)
        j, m = 0, len(b)
        while True:
            if i == n:
                ans.extend(b[j:])
                return ans
            if j == m:
                ans.extend(a[i:])
                return ans
            if a[i][0] < b[j][0]:
                ans.append(a[i])
                i += 1
            elif a[i][0] > b[j][0]:
                ans.append(b[j])
                j += 1
            else:
                a[i][1] += b[j][1]
                ans.append(a[i])
                i += 1
                j += 1

上一题