杨氏矩阵第K小值/两个数组元素之和最小值
来源:互联网 发布:sopcast这款网络电视 编辑:程序博客网 时间:2024/06/16 17:00
最近在面试中被问到一道算法题目:
给定两个有序数组A[]和B[],求A[i]+B[j]的第k小的。
不幸当场没给出答案。。。
回来查了一下,其实这个题目还可以转换为杨氏矩阵中第k小的值。不知道什么是杨氏矩阵的,可以自行百度。或者简单理解为一个每行每列都是递增的矩阵。
这道题目可以用二分法来解,具体算法如下:
public int KthSum(int[] A, int[] B,int k){ int lenA=A.length; int lenB=B.length; int max=A[lenA-1]+B[lenB-1]; int min=A[0]+B[0]; return solve(A, B,max, min , k); } public int solve(int[] A,int [] B,int max,int min, int k){ if(max==min) return max; int mid=(min+max)/2; if(counter(mid, A, B)>=k) return solve(A, B, max, mid+1, k); if(counter(mid-1, A, B)<k) return solve(A, B, mid-1, min, k); return mid; } public int counter(int val,int[] A,int[] B){ int i=0; int j=B.length-1; int count=0; while(i<A.length&&j>=0){ if(A[i]+B[j]>val){ count += A.length-i; j--; }else { i++; } } return count; }
0 0
- 杨氏矩阵第K小值/两个数组元素之和最小值
- 两个有序数组元素之和的最小K个值
- 在两个排序数组中查找第k小元素
- 求两个有序数组的第k小元素
- 两个数组的元素之和最大的前k项
- 面试算法:lg(k)时间查找两个排序数组合并后第k小的元素
- 合并两个数组,新数组第k小的元素---二分--九度OJ1534
- 树状数组求第K小元素
- 寻找数组中第k小元素
- 树状数组求第K小元素
- 求两个有序数组的中位数和者第k小元素
- 【极难】【二分查找】返回两个数组中第k小的元素
- 求两个已排序的数组中所有元素的第K大(小)
- 求两个有序数组的中位数或者第k小元素
- 从两个有序数组的并集中寻找第k小元素
- 从两个有序数组的并集中寻找第k小元素
- [LeetCode题解]从两个有序数组的并集中寻找第k小元素
- 求两个集合的交集以及求两个有序数组并集的第k小元素
- 菜鸟初识shell
- 天声人語 20150812
- Android Studio系列教程1一--下载与安装
- linux vi选中文本方法
- android build 过程 (ramdisk.img、sytem.img、userdata.img)和 启动过程简单分析
- 杨氏矩阵第K小值/两个数组元素之和最小值
- Remove Nth Node From End of List
- VB查询ACCESS数据库内容
- Ubuntu下使用SQLCipher命令行对db加密
- HTMLParser半自动解析网页的应用
- 在linux上部署Java项目
- Gaming鼠标术语解析
- Linux里如何查找文件内容
- String s 与String s1 = new String();的本质区别及==与equals的区别。