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

本质上是使用二分查找

注意:在考虑二分的边界时,可以不用数组的下标边界进行替代,而是直接使用极大的数进行替代

复制代码
 1 class Solution {
 2 public:
 3     double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
 4         if(nums1.size()>nums2.size())
 5             return findMedianSortedArrays(nums2,nums1);
 6         int n1=nums1.size(),n2=nums2.size();
 7         int n=n1+n2;
 8         int k=n%2==0?n/2:n/2+1;
 9         double res=0;
10 
11         int l=-1,r=n1-1;
12         while(l<=r)
13         {
14             int mid1=(l+r)>>1;
15             int mid2=k-mid1-1-1;
16 
17             int num1_l=mid1>=0?nums1[mid1]:INT_MIN;
18             int num2_l=mid2>=0?nums2[mid2]:INT_MIN;
19             int num1_r=mid1+1<n1?nums1[mid1+1]:INT_MAX;
20             int num2_r=mid2+1<n2?nums2[mid2+1]:INT_MAX;
21 
22             if(max(num1_l,num2_l)<=min(num1_r,num2_r))
23             {
24                 res=max(num1_l,num2_l);
25                 if(n%2==0)
26                 {
27                     res+=min(num1_r,num2_r);
28                     res/=2;
29                 }
30                 return res;
31 
32             }
33             else if(num1_l>num2_r)
34                 r=mid1-1;
35             else
36                 l=mid1+1;
37         }
38 
39         return 0;
40         
41 
42 
43     }
44 };
View Code
复制代码

 

posted @   80k  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示