返回

LeetCode 4. 寻找两个正序数组的中位数【C++/Java 题解】

后端

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()