面试:数组:两数组中的中序数
2016-05-15 16:05
423 查看
题目
两个有序的数组A和B,分别拥有m和n长度,求合并后的第k个数算法
二分查找O(lgN)import java.util.*; class Solution{ private double findkthSortedArrays(int[] A,int astart,int aend,int[] B,int bstart,int bend,int k){ int m=aend-astart,n=bend-bstart; if(m<n) return findkthSortedArrays(B,bstart,bend,A,astart,aend,k); if(n==0) return A[astart+k-1]; if(n==1) return Math.min(A[astart],B[bstart]); int pb=Math.min(k/2,n),pa=k-pb; if(A[astart+pa-1]>B[bstart+pa-1]) return findkthSortedArrays(A,astart,aend,B,bstart+pb,bend,k-pb); else if(A[astart+pa-1]<B[bstart+pa-1]) return findkthSortedArrays(A,astart+pa,aend,B,bstart,bend,k-pa); else return A[astart+pa-1]; } public double findMedianSortedArrays(int[] A,int[] B){ int m=A.length,n=B.length; if((n+m)%2==1) return findkthSortedArrays(A,0,m,B,0,n,(n+m)/2+1); else return (findkthSortedArrays(A,0,m,B,0,n,(n+m)/2+1)+ findkthSortedArrays(A,0,m,B,0,n,(n+m)/2))/2.0; } public static void main(String[] args){ Scanner cin=new Scanner(System.in); Solution s=new Solution(); int[] A={1,2,4}; int[] B={3,5,6}; System.out.println(s.findMedianSortedArrays(A, B)); } }
相关文章推荐
- 程序员的基本学习素质
- 史上最全的iOS面试题及答案
- 剑指offer面试题12 (二)
- 找数2--nkoj3679(百度面试题)
- 剑指offer面试题38:数字在已排序数组中出现的次数
- 码农的泪——二分答案总结
- 你离顶尖Java程序员,只差这11本书的距离 172 分享 分享到新浪微博 分享到QQ空间
- 每个程序员应该阅读的10本经典书籍
- 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解
- 年薪10万和年薪100万的人,究竟差在哪里?
- 2016小米实习生面试心得
- Java多线程面试总结
- 总结Android面试问题
- 设计师和程序员-拓展知识关系网
- 职场7条黄金标准,你做到了几条?
- 程序员常用网站汇总
- Java面试题
- 面试:数组:Topk _1
- 程序员必须知道的10大基础实用算法及其讲解
- 微软面试100题-70