多数组第K小数
来源:互联网 发布:海报自动设计软件 编辑:程序博客网 时间:2024/05/22 05:22
给定两个有序数组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 = {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}))。
直接上代码:
class Solution {public: int getupmedian(vector<int> arr1,int start1,int end1, vector<int> arr2,int start2,int end2){ int mid1=(start1+end1)/2; int mid2=(start2+end2)/2; int offest=((end1-start1+1)&1)^1; if(end1<start1) return -1; if(start1==end1) return arr1[start1]<=arr2[start2]?arr1[start1]:arr2[start2]; if(arr1[mid1]==arr2[mid2]) return arr1[mid1]; else if(arr1[mid1]>arr2[mid2]) return getupmedian(arr1,start1,mid1,arr2,mid2+offest,end2); else return getupmedian(arr1,mid1+offest,end1,arr2,start2,mid2); } int findKthNum(vector<int> arr1, vector<int> arr2, int kth) { int len1=arr1.size(),len2=arr2.size(); if(kth<1 || kth>len1+len2) return -1; if(len1<len2) arr1.swap(arr2); len1=arr1.size(); len2=arr2.size(); if(kth<=len2) return getupmedian( arr2,0,kth-1,arr1,0,kth-1); if(kth>len1){ if(arr2[kth-len1-1]>=arr1[len1-1]) return arr2[kth-len1-1]; if(arr1[kth-len2-1]>=arr2[len2-1]) return arr1[kth-len2-1]; return getupmedian(arr2,kth-len1,len2-1,arr1,kth-len2,len1-1); } if(arr1[kth-len2-1]>=arr2[len2-1]) return arr1[kth-len2-1]; return getupmedian( arr2,0,len2-1,arr1,kth-len2,kth-1); }};
0 0
- 多数组第K小数
- 第k小数
- 第K小数
- 第k小数
- 第k小数
- whuoj1574 第K小数
- 第k小数
- 第K小数
- 第K小数
- 第K小数
- 多数组K大数
- 多数组K大数
- 第K(大)小数
- 线段树--第k小数
- NKOI 1922 第K小数
- 【poj3065改编】第K小数
- 第K小数(二分)
- 第K小数(二分)
- spring 学习
- 一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
- 圆形图片的处理
- Web网页简单的静态导航菜单的制作
- ORACLE 操作
- 多数组第K小数
- 【CODEVS 1553】互斥的数 哈希表
- Android异常捕获03
- Keras:基于Theano和TensorFlow的深度学习库之中文文档
- LeetCode 39/40. Combination Sum i, ii
- Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (下)
- 常见快捷键eclipse
- gitignore
- 应用接入微信支付——移动支付