两个有序数组,求第K小数
2015-10-22 14:02
375 查看
<pre name="code" class="cpp">两个有序数组A[0...m-1],B[0...n-1],A与B中所有元素均不重复,求A[],B[]合成数组的第K小数
class Solution { public: //there are no duplicate elements in array A or B. int findKthSmallest(int A[], int m, int B[], int n, int k) { assert(k > 0 && k <= m + n); assert(m >= 0 && n >= 0); int i = (m + 0.0) / (m + n) * (k - 1); //i=m/(m+n)*(k-1) int j = k - 1 - i; // i+j=k-1 >>> j = (k-1)-i = (k-1)-[m/(m+n)*(k-1)] = n/(m+n)*(k-1) assert(i >= 0 && i <= m); assert(j >= 0 && j <= n); int Ai = (i == m ? INT_MAX : A[i]); int Ai_1 = (i == 0 ? INT_MIN : A[i-1]); int Bj = (j == n ? INT_MAX : B[j]); int Bj_1 = (j == 0 ? INT_MIN : B[j-1]); if(Ai_1 < Bj && Bj < Ai) return Bj; if(Bj_1 < Ai && Ai < Bj) return Ai; assert((Ai > Bj && Ai_1 > Bj) || (Bj > Ai && Bj_1 > Ai)); if(Bj < Ai) return findKthSmallest(A, i, B + j + 1, n - j - 1, k - j - 1); if(Ai < Bj) return findKthSmallest(A + i + 1, m - i - 1, B, j, k - i - 1); return -1; } };
相关文章推荐
- KMP算法的C语言实现
- 关于UIView的autoresizingMask属性的研究
- linux根文件系统树制作
- 文件操作
- 如何给第三方人员提供oracle接口
- (138)子数组之和
- ArcGIS教程:收缩 (Spatial Analyst)
- 关于数组TOP K算法(快排及最小堆方式C代码)
- MYSQL语法速查之表更改
- CentOS7 bonding配置
- Gradle Android Studio basic
- 数据库分享一: MySQL的Innodb缓存相关优化
- ubuntu下android源码下载
- Linux系统文件系统详解
- Trident State 详解
- C++多态的实现原理
- js 保存用户7天
- 重新认识Java线程的概念
- C++浅拷贝、深拷贝及引用计数浅析
- css3 transition 动画