• 首页
  • 前端技术
  • 编程语言
  • 人工智能
  • 运维知识
  • 资源下载
  • 常用小工具
  • 技术问答

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

2022-12-23

题目链接

【题解】

假设在两个有序的序列中找第k小的数字。 那么我们先定位第一个序列中的第k/2个数字(不足则取最边上的那个数字)记下标为i1 然后定位第二个序列中的第k/2个数字(同样不足则取最边上的那个数字)记下标为i2 如果a[i1]

【代码】

class Solution {
public:
    
    int n,m;
    
    double findkth(vector<int> &nums1,vector<int> &nums2,int l1,int r1,int l2,int r2,int k){
        if (l1>r1) return nums2[l2+k-1];        
        if (l2>r2) return nums1[l1+k-1];
        if (k==1) return min(nums1[l1],nums2[l2]);
        int temp = k/2;
        int i1 = l1+temp-1;
        int i2 = l2+temp-1;
        if (i1>r1) i1 = r1;
        if (i2>r2) i2 = r2;
        if (nums1[i1]<nums2[i2]){
            //把l1..i1全删掉
            return findkth(nums1,nums2,i1+1,r1,l2,r2,k-(i1-l1+1));
        }else{
            //把l2..i2全删掉
            return findkth(nums1,nums2,l1,r1,i2+1,r2,k-(i2-l2+1));
        }
    }
    
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        n = nums1.size();m = nums2.size();
        if ((n+m)%2==1){
            return findkth(nums1,nums2,0,n-1,0,m-1,(n+m+1)/2);
        }else{
            double temp = findkth(nums1,nums2,0,n-1,0,m-1,(n+m)/2);
            temp+=findkth(nums1,nums2,0,n-1,0,m-1,(n+m)/2+1);
            temp/=2;
            return temp;
        }
    }
};
[i2]>

相关文章:

猜你喜欢
相关资源
相似解决方案
热门标签
Java Python linux javascript Mysql C# Docker 算法 前端 SpringBoot Redis Vue spring 设计模式 .net core .net kubernetes c++ 数据库 数据结构 大数据 js 机器学习 微服务 Android Go 程序员 面试 JVM ASP.net core 云原生 人工智能 后端 PHP git CSS golang k8s Nginx Django mybatis 深度学习 多线程 React 架构 devops 爬虫 云计算 Spring Boot LeetCode
By © 2026 likecs 版权所有,
本站所有数据收集于网络如有侵犯到您的权益请联系 进行下架处理1。
粤ICP备22038628号Powered By WordPress