Leetcode 4 Median of Two Sorted Arrays 二分查找(二分答案+二分下标)
2024-09-20 13:10:03
貌似是去年阿里巴巴c++的笔试题,没有什么创新直接照搬的。。。
题意就是找出两个排序数组的中间数,其实就是找出两个排序数组的第k个数。
二分答案,先二分出一个数,再用二分算出这个数在两个排序数组排序第几,然后和k做比较,最后以这个比较为依据接着二分直到求出第k个数。
本来这是两重二分,由于楼主的懒已经没有办法治疗了,用库函数upper_bound()代替了第二重二分,有志者可以自己写第二重二分,楼主就偷懒了。。。
警告:由于题目很神奇,会出现两个排序数组为空的情况,楼主差点因为这个报警。。。。
class Solution {
public:
int findkth(vector<int>& nums1, vector<int>& nums2, int k){
int l = min(nums1[],nums2[]);
int r = max(nums1[nums1.size() - ], nums2[nums2.size() - ]);
while(l <= r){
int mid = l + (r - l)/ ;
int k1 = upper_bound(nums1.begin(), nums1.end(), mid) - nums1.begin() ;
int k2 = upper_bound(nums2.begin(), nums2.end(), mid) - nums2.begin() ;
if(k1 + k2 == k){
if(k1 > && mid == nums1[k1 - ]) return mid;
else if(k2 > && mid == nums1[k2 - ]) return mid;
else r = mid - ;
}
else if(k1 + k2 > k){
r = mid - ;
}
else l = mid + ;
}
return l;
}
double getmid(vector<int>& nums){
if(nums.size() % == ) return (nums[nums.size() / - ] + nums[nums.size() / ]) / 2.0;
else return nums[nums.size() / ];
}
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
if(nums1.size() == && nums2.size() == ) return 0.0;
if(nums1.size() == ) return getmid(nums2);
if(nums2.size() == ) return getmid(nums1);
int k = (nums1.size() + nums2.size() + ) / ;
if((nums1.size() + nums2.size()) % == ){
return (findkth(nums1, nums2, k) + findkth(nums1, nums2, k + ))/2.0;
}
else return findkth(nums1, nums2, k);
}
};
最新文章
- Android 开源框架Universal-Image-Loader学习
- ffmpeg-20160714-git-bin.7z
- 简单并查集 -- HDU 1232 UVALA 3644 HDU 1856
- cocos2dx3.0 removeFromParent和removeAllChildren含义
- 每天一个linux命令(29):date命令
- SQLServer 删除所有表和删除所有存储过程
- FastCgi与PHP-fpm之间是个什么样的关系
- LeetCode10 Regular Expression Matching
- c#数组乱序,打乱数组
- vuex 模块
- 更新-----Scripts:执行双网卡绑定
- hadoop搭建杂记:Linux下ssh免密码登陆
- Android网络:开发浏览器(五)——功能完善之保存图片实现
- Centos7 开放防火墙端口命令
- VINS 估计器之结构初始化
- Cocoa 框架 For iOS(一) 框架的介绍,Objectivie-C运行时能力的解析等 (转载)
- JavaScript -- Window-Scroll
- HDU-6356 Glad You Came (线段树)
- 【BZOJ-4031】小z的房间 Matrix-Tree定理 + 高斯消元解行列式
- 使用点击二分图传导计算query-document的相关性