博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第三周 Leetcode 4. Median of Two Sorted Arrays (HARD)
阅读量:5335 次
发布时间:2019-06-15

本文共 1463 字,大约阅读时间需要 4 分钟。

给定两个有序的整数序列。求中位数,要求复杂度为对数级别。

通常的思路,我们二分搜索中位数,对某个序列里的某个数 我们可以在对数时间内通过二分算法求得两个序列中比它小的数,整体复杂度也是对数级别。但是代码实现较为困难。

换一个思路,我们把中位数不要当作一个数,而当作一个序列的划分。划分后,序列的左半部设为L,右半部设为R 满足max(L)<=min(R)且满足len(L)==len(R)

二分搜索这个划分即可。对于A+B的长度为奇数的情况,我们进行特殊处理,在划分时允许“借一位”。

其中一个序列为空则直接输出答案。

 

补充一个算法,对于两个无序的数列求中位数,《算法概论》中给出了线性的解法。通过类似快速排序的划分方法对数列进行划分,预测中位数可能存在的部分。

class Solution {public:    double findMedianSortedArrays(vector
& nums1, vector
& nums2) { if(nums2.size()==0) { if(nums1.size()%2==0)return (double)(nums1[nums1.size()/2]+nums1[nums1.size()/2-1])/2.0; else return (double)nums1[nums1.size()/2]; } if(nums1.size()==0) { if(nums2.size()%2==0)return (double)(nums2[nums2.size()/2]+nums2[nums2.size()/2-1])/2.0; else return (double)nums2[nums2.size()/2]; } int len=(nums1.size()+nums2.size())/2; bool flag=(nums1.size()+nums2.size())%2==1; if(flag)len++; int l=-1,r=min((int)nums1.size()-1,len-1); while(true) { int i=(l+r)/2,ii; ii=i+1; int j=len-(i+1)-1,jj; jj=j+1; if(j>=(int)nums2.size()){l=i+1;continue;} int l1=-2147483647,l2=-2147483647,r1=2147483647,r2=2147483647; if(i>=0)l1=nums1[i]; if(j>=0)l2=nums2[j]; if(ii
=l2)r1=min(l1,r1); if(flag&&l2>l1)r2=min(r2,l2); int maxa=max(l1,l2);int minb=min(r1,r2); if(maxa<=minb){return (double)(maxa+minb)/2.0;} if(l1>r2){r=i-1;continue;} else{l=i+1;continue;} } }};

  

 

转载于:https://www.cnblogs.com/heisenberg-/p/6536176.html

你可能感兴趣的文章
AtCoder Beginner Contest 133 F Colorful Tree
查看>>
算法笔记--BSGS && exBSGS 模板
查看>>
P5043 【模板】树同构([BJOI2015]树的同构)
查看>>
Codeforces 348 D - Turtles
查看>>
bzoj 2321 星器
查看>>
HDU 6568 Math
查看>>
BZOJ 4488: [Jsoi2015]最大公约数
查看>>
算法笔记--笛卡尔树模板
查看>>
2018年长沙理工大学第十三届程序设计竞赛 I 连续区间的最大公约数
查看>>
AcWing 246. 区间最大公约数
查看>>
算法笔记--线性基求交模板
查看>>
BZOJ 2154: Crash的数字表格
查看>>
The 2019 Asia Nanchang First Round Online Programming Contest The Nth Item
查看>>
BZOJ1413 [ZJOI2009]取石子游戏
查看>>
「模拟8.21」虎
查看>>
「模拟8.23」阴阳 DP
查看>>
「模拟8.21」山洞(矩阵优化DP)
查看>>
「模拟8.29」chinese(性质)·physics·chemistry(概率期望)
查看>>
「csp-s模拟测试(9.18)」Set·Read·Race
查看>>
csp-s模拟测试「9.14」A·B·C(三分,贪心)
查看>>