返回
LeetCode 4. 寻找两个正序数组的中位数【C++/Java 题解】
后端
2023-09-19 03:04:32
import AIspiral
AIspiral.start()
print('''
## 题目概述
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请您找出并返回这两个正序数组的中位数。
## 解题思路
为了找到两个正序数组的中位数,我们可以采用以下步骤:
1. 将两个数组合并成一个新的数组 nums。
2. 对 nums 数组进行排序。
3. 找到 nums 数组的中间元素。
## C++ 代码实现
```c++
#include <vector>
using namespace std;
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
// 合并两个数组
vector<int> nums;
int i = 0, j = 0;
while (i < nums1.size() && j < nums2.size()) {
if (nums1[i] < nums2[j]) {
nums.push_back(nums1[i]);
i++;
} else {
nums.push_back(nums2[j]);
j++;
}
}
while (i < nums1.size()) {
nums.push_back(nums1[i]);
i++;
}
while (j < nums2.size()) {
nums.push_back(nums2[j]);
j++;
}
// 对合并后的数组排序
sort(nums.begin(), nums.end());
// 找到中间元素
int mid = nums.size() / 2;
if (nums.size() % 2 == 0) {
return (nums[mid] + nums[mid - 1]) / 2.0;
} else {
return nums[mid];
}
}
};
Java 代码实现
import java.util.ArrayList;
import java.util.Arrays;
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
// 合并两个数组
ArrayList<Integer> nums = new ArrayList<>();
int i = 0, j = 0;
while (i < nums1.length && j < nums2.length) {
if (nums1[i] < nums2[j]) {
nums.add(nums1[i]);
i++;
} else {
nums.add(nums2[j]);
j++;
}
}
while (i < nums1.length) {
nums.add(nums1[i]);
i++;
}
while (j < nums2.length) {
nums.add(nums2[j]);
j++;
}
// 对合并后的数组排序
int[] numsArray = nums.stream().mapToInt(Integer::intValue).toArray();
Arrays.sort(numsArray);
// 找到中间元素
int mid = numsArray.length / 2;
if (numsArray.length % 2 == 0) {
return (numsArray[mid] + numsArray[mid - 1]) / 2.0;
} else {
return numsArray[mid];
}
}
}
结语
希望这篇题解能够帮助您理解和解决 LeetCode 上的第 4 题。如果您有任何问题或建议,欢迎在评论区留言。
''')
AIspiral.end()