参加了百度二面,问到了这道题,当时用了归并排序的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

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

被折叠的 条评论
为什么被折叠?



