貌似是去年阿里巴巴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);
}
};

最新文章

  1. Android 开源框架Universal-Image-Loader学习
  2. ffmpeg-20160714-git-bin.7z
  3. 简单并查集 -- HDU 1232 UVALA 3644 HDU 1856
  4. cocos2dx3.0 removeFromParent和removeAllChildren含义
  5. 每天一个linux命令(29):date命令
  6. SQLServer 删除所有表和删除所有存储过程
  7. FastCgi与PHP-fpm之间是个什么样的关系
  8. LeetCode10 Regular Expression Matching
  9. c#数组乱序,打乱数组
  10. vuex 模块
  11. 更新-----Scripts:执行双网卡绑定
  12. hadoop搭建杂记:Linux下ssh免密码登陆
  13. Android网络:开发浏览器(五)——功能完善之保存图片实现
  14. Centos7 开放防火墙端口命令
  15. VINS 估计器之结构初始化
  16. Cocoa 框架 For iOS(一) 框架的介绍,Objectivie-C运行时能力的解析等 (转载)
  17. JavaScript -- Window-Scroll
  18. HDU-6356 Glad You Came (线段树)
  19. 【BZOJ-4031】小z的房间 Matrix-Tree定理 + 高斯消元解行列式
  20. 使用点击二分图传导计算query-document的相关性

热门文章

  1. 【九度OJ】题目1111:单词替换
  2. struts2中jsp前台传值到后台action的方法(转)
  3. 一款免费支持PDF、word、excel、PPT、jpeg之间互转线上软件
  4. MyEclipse 自带的TomCat 新增部署的时候不显示 Deploy Location
  5. Groonga 3.0.8 发布,全文搜索引擎
  6. phoenix 开发API系列(一)创建简单的http api
  7. Angularjs路由需要了解的那点事
  8. 在Ubuntu中安装Python3
  9. 【转载】学习资料存档:jQuery的deferred对象详解
  10. 基础调试命令 - u/ub/uf