Median of Two Sorted Arrays
Median of Two Sorted Arrays
问题:
There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
思路:
二分查找变形
我的代码:
public class Solution { public double findMedianSortedArrays(int A[], int B[]) { int lenA = A.length; int lenB = B.length; if((lenA+lenB)%2 == 1) return (double)findKth(A,B,(lenA+lenB)/2+1); else return (findKth(A,B,(lenA+lenB)/2+1) + findKth(A,B,(lenA+lenB)/2))/(double)2; } public int findKth(int[] a, int[] b, int k) { int lenA = a.length; int lenB = b.length; if(lenA > lenB) return findKth(b, a, k); if(lenA == 0) return b[k-1]; if(k == 1) return Math.min(a[0],b[0]); int pa = Math.min(k/2,lenA); int pb = k - pa; if(a[pa-1] == b[pb-1]) return a[pa-1]; else if(a[pa-1] < b[pb-1]) return findKth(Arrays.copyOfRange(a, pa, lenA), b, k - pa); else return findKth(a, Arrays.copyOfRange(b, pb, lenB), k - pb); } }
学习之处:
- 今天下午状态不好,想了一会没有思路,就直接看答案了,之前肯定是用二分查找的问题,没想到二分查找也等价于二分排除嘛!这一点没有意识到。
- 原题被转换成经典的找两个sorted的数组中 K大的数,不断的去排除掉不符合的部分
- 首先假设数组A和B的元素个数都大于k/2,我们比较A[k/2-1]和B[k/2-1]两个元素,这两个元素分别表示A的第k /2小的元素和B的第k/2小的元素。这两个元素比较共有三种情况:>、<和=。如果A[k/2-1]<B[k/2-1],这表示 A[0]到A[k/2-1]的元素都在A和B合并之后的前k小的元素中。换句话说,A[k/2-1]不可能大于两数组合并之后的第k小值,所以我们可以将 其抛弃,同理A[k/2-1]>B[k/2-1]。当A[k/2-1]=B[k/2-1]的时候,A[k/2 - 1]即为第K个大的数
posted on 2015-04-03 16:07 zhouzhou0615 阅读(162) 评论(0) 编辑 收藏 举报
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 对象分配(Alloc)底层原理浅谈
· 聊一聊 C#异步 任务延续的三种底层玩法
· 敏捷开发:如何高效开每日站会
· 为什么 .NET8线程池 容易引发线程饥饿
· golang自带的死锁检测并非银弹
· 欧阳的2024年终总结,迷茫,重生与失业
· 聊一聊 C#异步 任务延续的三种底层玩法
· 上位机能不能替代PLC呢?
· 2024年终总结:5000 Star,10w 下载量,这是我交出的开源答卷
· .NET Core:架构、特性和优势详解