跳到主要内容

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

链接:2570.合并两个二维数组-求和法
难度:Easy
标签:数组、哈希表、双指针
简介:合并两个二维数组。

题解 1 - cpp

  • 编辑时间:2023-02-19
  • 执行用时:8ms
  • 内存消耗:10.4MB
  • 编程语言:cpp
  • 解法介绍:遍历。
class Solution {
public:
vector<vector<int>> mergeArrays(vector<vector<int>>& nums1, vector<vector<int>>& nums2) {
vector<vector<int>> ans;
int i1 = 0, i2 = 0;
int n1 = nums1.size(), n2 = nums2.size();
while (i1 < n1 || i2 < n2) {
if (i1 == n1) ans.push_back(nums2[i2++]);
else if (i2 == n2) ans.push_back(nums1[i1++]);
else {
if (nums1[i1][0] == nums2[i2][0]) {
vector<int> item(2, nums1[i1][0]);
item[1] = nums1[i1++][1] + nums2[i2++][1];
ans.push_back(item);
} else if (nums1[i1][0] < nums2[i2][0]) {
ans.push_back(nums1[i1++]);
} else {
ans.push_back(nums2[i2++]);
}
}
}
return ans;
}
};

题解 2 - python

  • 编辑时间:2023-02-19
  • 执行用时:40ms
  • 内存消耗:15.1MB
  • 编程语言:python
  • 解法介绍:同上。
class Solution:
def mergeArrays(self, nums1: List[List[int]], nums2: List[List[int]]) -> List[List[int]]:
ans = []
i1, i2, n1, n2 = 0, 0, len(nums1), len(nums2)
while i1 < n1 or i2 < n2:
if i1 == n1:
ans.append(nums2[i2])
i2 += 1
elif i2 == n2:
ans.append(nums1[i1])
i1 += 1
else:
if nums1[i1][0] == nums2[i2][0]:
ans.append([
nums1[i1][0],
nums1[i1][1] + nums2[i2][1]
])
i1 += 1
i2 += 1
elif nums1[i1][0] < nums2[i2][0]:
ans.append(nums1[i1])
i1 += 1
else:
ans.append(nums2[i2])
i2 += 1
return ans

题解 3 - rust

  • 编辑时间:2023-02-19
  • 内存消耗:2.2MB
  • 编程语言:rust
  • 解法介绍:同上。
impl Solution {
pub fn merge_arrays(nums1: Vec<Vec<i32>>, nums2: Vec<Vec<i32>>) -> Vec<Vec<i32>> {
let mut ans = vec![];
let (mut i1, mut i2, n1, n2) = (0, 0, nums1.len(), nums2.len());
while i1 < n1 || i2 < n2 {
if i1 == n1 {
ans.push(nums2[i2].clone());
i2 += 1
} else if i2 == n2 {
ans.push(nums1[i1].clone());
i1 += 1
} else {
if nums1[i1][0] == nums2[i2][0] {
let mut item = vec![nums1[i1][0]; 2];
item[1] = nums1[i1][1] + nums2[i2][1];
ans.push(item);
i1 += 1;
i2 += 1;
} else if nums1[i1][0] < nums2[i2][0] {
ans.push(nums1[i1].clone());
i1 += 1;
} else {
ans.push(nums2[i2].clone());
i2 += 1;
}
}
}
ans
}
}