百度面试题-- 两个递增数组,找到二者合并后的第K大数

在百度二面中遇到的问题,原解法使用归并排序,但实际最优解应利用二分查找。通过分析边界条件和避免死循环,实现高效算法。参考博客进一步优化思路,确保在所有情况下都能找到正确答案。

参加了百度二面,问到了这道题,当时用了归并排序的merge函数进行了回答,显然这种解法很挫。因为基础知识不全面,其他问题回答的也不好,挂了也意料之中。没事,继续努力!

正确的解法应该都能想到是往二分查找靠拢。花了将近一天的时间,把这道题好好优化了下,最终思路跟如下博客很接近:http://blog.youkuaiyun.com/beiyeqingteng/article/details/7533304

这里贴出自己的代码,里面有几个写的比较好的地方下面再分析下

#include<iostream>
#include<climits>
#include<iomanip>
using namespace std;

#define caseNum 6
#if (caseNum==1)
#define M (5)
#define N (5)
int a[M]={1,3,5,7,9};
int b[N]={2,4,6,8,10};
#elif (caseNum==2)
#define M (5)
#define N (10)
int a[M]={1,3,5,7,9};
int b[N]={2,4,6,8,10,12,14,16,18,20};
#elif (caseNum==3)
#define M (10)
#define N (5)
int a[M]={2,4,6,8,10,12,14,16,18,20};
int b[N]={1,3,5,7,9};
#elif (caseNum==4)
#define M (10000)
#define N (20000)
int a[M];
int b[N];
#elif (caseNum==5)
#define M (20000)
#define N (10000)
int a[M];
int b[N];
#elif (caseNum==6)
#define M (100
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值