LeetCode 算法 每日一题 4.寻找两个正序数组的中位数

4.寻找两个正序数组的中位数

题目描述

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。

示例1

输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2

示例2

输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5

示例3

输入:nums1 = [0,0], nums2 = [0,0]
输出:0.00000

示例4

输入:nums1 = [], nums2 = [1]
输出:1.00000

示例5

输入:nums1 = [2], nums2 = []
输出:2.00000

提示

  • nums1.length == m
  • nums2.length == n
  • 0 <= m <= 1000
  • 0 <= n <= 1000
  • 1 <= m + n <= 2000
  • -10^6 <= nums1[i], nums2[i] <= 10^6
  • 再不用归并算法和默认合并排序算法的情况下解决问题

代码演示
Java

public class OneQuestionPerDay4 {

    public static void main(String[] args) {
        Solution04 s = new Solution04();

        int nums1_1[] = {1,3};
        int nums1_2[] = {2};
        System.out.println(s.findMedianSortedArrays(nums1_1,nums1_2));

        int nums2_1[] = {1,2};
        int nums2_2[] = {3,4};
        System.out.println(s.findMedianSortedArrays(nums2_1,nums2_2));

        int nums3_1[] = {0,0};
        int nums3_2[] = {0,0};
        System.out.println(s.findMedianSortedArrays(nums3_1,nums3_2));

        int nums4_1[] = {};
        int nums4_2[] = {1};
        System.out.println(s.findMedianSortedArrays(nums4_1,nums4_2));

        int nums5_1[] = {2};
        int nums5_2[] = {};
        System.out.println(s.findMedianSortedArrays(nums5_1,nums5_2));

        int nums6_1[] = {3,4};
        int nums6_2[] = {};
        System.out.println(s.findMedianSortedArrays(nums6_1,nums6_2));
    }

}

class Solution{
    public float findMedianSortedArrays(int[] nums1,int[] nums2) {
        int i = 0,j = 0,k = 0;
        int n1 = nums1.length,n2 = nums2.length,n3 = n1 + n2;
        int result[] = new int[n3];
        while((i <= n1-1) && (j <= n2 - 1)){
            if(nums1[i] <= nums2[j]){
                result[k] = nums1[i];
                k++;
                i++;
            }else{
                result[k] = nums2[j];
                k++;
                j++;
            }
        }
        if(i >= n1-1){
            while (j != n2){
                result[k] = nums2[j];
                k++;
                j++;
            }
        }
        if(j >= n2-1){
            while (i != n1){
                result[k] = nums1[i];
                k++;
                i++;
            }
        }
        if(n3 % 2 == 0){
            float r = (result[n3/2] + result[(n3/2)-1]);
            return r/2;
        }else{
            return (float)result[(n3-1)/2];
        }
    }
}

Java 提交结果
执行用时:3 ms, 在所有 Java 提交中击败了82.27% 的用户
内存消耗:39.3 MB, 在所有 Java 提交中击败了97.71% 的用户

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W.Lionel.Esaka

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值