试题
来源:互联网 发布:淘宝高仿鞋可信店铺 编辑:程序博客网 时间:2024/06/10 05:09
给定两个有序数组arr1和arr2,在给定一个整数k,返回两个数组的所有数中第K小的数。
例如:
arr1 ={1,2,3,4,5};
arr2 ={3,4,5};
K = 1;
因为1为所有数中最小的,所以返回1;
arr1 ={1,2,3};
arr2 ={3,4,5,6};
K = 4;
因为3为所有数中第4小的数,所以返回3;
要求:如果arr1的长度为N,arr2的长度为M,时间复杂度请达到O(log(min{M,N}))。
分析:此题比较难,我们需要对k分三种情况,并调用第4题的答案进行求解。
(1) 如果k小于length1, 就相当于找arr1与arr2前k个元素的上中位数
(2) 如果k在length1和length2 之间,那么就是取arr1与arr2在[k-length1,k-length1+9]之间的上中位数
(3) 第三种情况k大于等于length2 都转换成了求中位数了
代码:
例如:
arr1 ={1,2,3,4,5};
arr2 ={3,4,5};
K = 1;
因为1为所有数中最小的,所以返回1;
arr1 ={1,2,3};
arr2 ={3,4,5,6};
K = 4;
因为3为所有数中第4小的数,所以返回3;
要求:如果arr1的长度为N,arr2的长度为M,时间复杂度请达到O(log(min{M,N}))。
分析:此题比较难,我们需要对k分三种情况,并调用第4题的答案进行求解。
(1) 如果k小于length1, 就相当于找arr1与arr2前k个元素的上中位数
(2) 如果k在length1和length2 之间,那么就是取arr1与arr2在[k-length1,k-length1+9]之间的上中位数
(3) 第三种情况k大于等于length2 都转换成了求中位数了
代码:
- /*
- 两个有序数组中找到第k大的数,时间复杂度为O(lg{min(M,N)})
- 这里的输入假设arr1的长度要小于等于arr2的长度。
- */
- int getKTopProcess(int *arr1, int start1, int end1, int *arr2, int start2, int end2, int k){
- int length1 = end1 - start1 + 1; // 假定length1 <= length2
- int length2 = end2 - start2 + 1;
- if(k <=0 || k >length1+length2) return 0;// 不存在
- // 如果k小于length1, 就相当于找arr1与arr2前k个元素的上中位数
- if(k <= length1) return findMedianProcess2(arr1, start1, k-1, arr2, start2, k-1);
- // 如果k在length1和length2 之间,那么就是取arr1与arr2在[k-length1,k-length1+9]之间的上中位数
- else if(k < length2){
- if(arr2[k-length1-1] >= arr1[end1])return arr2[k-length1-1];
- else return findMedianProcess2(arr1, start1, end1, arr2, k-length1, k-length1+9);
- }
- // 第三种情况k大于等于length2 都转换成了求中位数了
- else{
- if(arr2[k-length1-1]>=arr1[end1])return arr2[k-length1-1];
- else if(arr1[k-length2-1] >= arr2[end2]) return arr1[k-length2-1];
- else return findMedianProcess2(arr1, k-length2, end1, arr2, k-length1, end1);
- }
- }
0 0
- 试题
- 试题
- 试题
- 试题
- 试题
- 试题
- 试题
- 试题
- 试题
- 试题
- 试题
- 试题
- 微软试题
- 面试题....
- 几道面试题
- 几道面试题
- 面试题
- 面试题
- ListControl 设置表格行高与字体
- REST API的认证机制的设计规则
- gulp入门(1)- gulp安装
- 《Effective Java》 读书笔记
- 我的nginx配置,针对proxy_cache的
- 试题
- 三参数或七参数计算工具使用帮助
- 【OpenGL】===配置与整理OpenGL===
- 【高并发Java一】前言
- 线程互斥与同步通讯
- iOS description
- SVM分类器算法
- Tomcat优化之配置线程池
- qt 连接mysql driver not loaded错误