class Solution {
public:
vector<vector<int>> mergeArrays(vector<vector<int>>& nums1, vector<vector<int>>& nums2) {
}
};
2570. 合并两个二维数组 - 求和法
给你两个 二维 整数数组 nums1
和 nums2.
nums1[i] = [idi, vali]
表示编号为 idi
的数字对应的值等于 vali
。nums2[i] = [idi, vali]
表示编号为 idi
的数字对应的值等于 vali
。每个数组都包含 互不相同 的 id ,并按 id 以 递增 顺序排列。
请你将两个数组合并为一个按 id 以递增顺序排列的数组,并符合下述条件:
0
。返回结果数组。返回的数组需要按 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 和其对应的值。
提示:
1 <= nums1.length, nums2.length <= 200
nums1[i].length == nums2[j].length == 2
1 <= idi, vali <= 1000
原站题解
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