目录

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

快乐安康

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

算法的时间复杂度应该为 O(log (m+n))

复制代码
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
    if (nums1.length > nums2.length) {
        return findMedianSortedArrays(nums2, nums1);
    }
    int x = nums1.length;
    int y = nums2.length;
    int low = 0, high = x;
    while (low <= high) {
        int partitionX = (low + high) / 2;
        int partitionY = (x + y + 1) / 2 - partitionX;

        int maxX = (partitionX == 0) ? Integer.MIN_VALUE : nums1[partitionX - 1];
        int maxY = (partitionY == 0) ? Integer.MIN_VALUE : nums2[partitionY - 1];

        int minX = (partitionX == x) ? Integer.MAX_VALUE : nums1[partitionX];
        int minY = (partitionY == y) ? Integer.MAX_VALUE : nums2[partitionY];

        if (maxX <= minY && maxY <= minX) {
            if ((x + y) % 2 == 0) {
                return (double) (Math.max(maxX, maxY) + Math.min(minX, minY)) / 2;
            } else {
                return (double) Math.max(maxX, maxY);
            }
        } else if (maxX > minY) {
            high = partitionX - 1;
        } else {
            low = partitionX + 1;
        }
    }
    throw new IllegalArgumentException("Input arrays are not sorted.");
}
本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
hhope11 分钟前
🚀 Vue 3 性能优化“骚操作” & Webpack/Vite 加速秘籍 (大白话版)
前端·javascript·面试
信徒_11 分钟前
Spring 中的 bean 生命周期
java·python·spring
肖恩想要年薪百万17 分钟前
如何在idea中快速搭建一个Spring Boot项目?
java·数据库·spring boot·后端·学习·mysql·intellij-idea
XuanXu17 分钟前
Java泛型 - 协变与逆变的个人理解
java
步行cgn28 分钟前
Java Properties 类详解
java·开发语言
爱看书的小沐31 分钟前
【小沐学Web3D】three.js 加载三维模型(Angular)
前端·javascript·vue·webgl·three.js·angular.js·opengl
雷渊42 分钟前
springBoot如何做到优雅停机的?
java·后端·面试
Diligent_lvan1 小时前
通俗地讲述DDD的设计
java·开发语言·ddd设计
sxlzs_1 小时前
Java 策略模式(二)-实战
java·开发语言·策略模式
KNeeg_1 小时前
⭐十大排序算法
java·算法·排序算法