在两个有序数组中找第N数(算法)
来源:互联网 发布:郭富城 熊黛林 知乎 编辑:程序博客网 时间:2024/05/19 20:59
对于 k <= x+y+1 还是 k > x+y+1 我们都提出了解决的方案,并且每种方案都能把 A 或者 B 的规模减小一半。减小了一半之后,我们将其作为一个新的问题继续使用上面的算法处理,直到 A 或者 B 减小到足够小:
- A 没有了,这样只需要找出 B 中第 k 大的元素,也就是 B[k]。
- B 没有了,同上结果就是 A[k]。
public class NumX {private int[] a;private int[] b;public int find(int aLeft, int aRight, int bLeft, int bRight, int k) {if (aLeft > aRight)return b[bLeft+k-1];if (bLeft > bRight)return a[aLeft+k-1];int aMid = (aLeft + aRight) / 2;int bMid = (bLeft + bRight) / 2;if (a[aMid] <= b[bMid]) {if (k <= (aMid-aLeft) + (bMid-bLeft) + 1)return find(aLeft, aRight, bLeft, bMid-1, k);elsereturn find(aMid+1, aRight, bLeft, bRight, k-(aMid-aLeft)-1);} else {if (k <= (aMid-aLeft) + (bMid-bLeft) + 1)return find(aLeft, aMid-1, bLeft, bRight, k);elsereturn find(aLeft, aRight, bMid+1, bRight, k-(bMid-bLeft)-1);}}}
0 0
- 在两个有序数组中找第N数(算法)
- 两个有序的数组中找第N个数
- 两个有序数组中找第N个数
- 在两个有序的数组中找第N个数,O(lgm+lgn)级
- 在两个有序的数组中找第N个数,二分查找 O(lgm+lgn)级
- 算法--合并两个有序数组
- 两个有序数组找第n个数
- 两个有序数组的第n大数
- 有序数组求两个数的和为某个值O(n)解法
- 在有序数组中查找两个数,使得它们的和正好是输入的那个数字。时间复杂度O(n)
- 在一个有序数组里面找到两个数,其中它们的和为某个值,要求时间复杂度为O(n)
- 两个有序的数组,求中间数
- 给出两个长度为N的有序数组A和B 给出求中位数的算法
- 算法导论2-1.4:给出两个长度为n的二进制数(当前存放在数组中),求和后放入长度为n+1的数组中
- 两个有序数组相关的算法
- 两个有序数组的合并算法
- 算法:两个有序数组的合并
- 两个有序数组的中位数 【算法】
- 使用shell脚本清空文件
- 在windows上搭建C语言开发环境——借助eclipse和MinGW
- Pearls(POJ--1260
- Javascript(一)-05-(JS语法-算术运算符)
- c++常见面试题30道
- 在两个有序数组中找第N数(算法)
- 日经春秋 20150820
- Android adt 添加J2ee 开发插件
- 解决C++项目编译时的multiple definition of重定义问题
- CSS透明度设置
- Dijkstra最短路算法
- 百度地图定位地图不显示
- 一位JAVA程序员的七夕情书——致未来的另一半
- 二进制枚举子集