Median of Two Sorted Arrays
There are two sorted arrays nums1 and nums2 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)).
https://leetcode.com/problems/median-of-two-sorted-arrays/
分析:
对于一个数x和连个排好序的数组a,b。如果x在a中是第ax个数,在b中是第bx个数。那么,x在a,b合并后的数组中是第(ax + bx - 1)个数。
充分利用两个数组已经排好序的特征,取a中前cntA = (k * lenA /(lenA + lenB))个元素(按数组中元素比例取元素,以避免边界情况),取b中cntB = k - 1 - cntA个元素。比较a[begA + cntA]和b[begB + cntB]:
- a[begA + cntA] == b[begB + cntB],a[begA + cntA]即为a,b中第k个元素
- a[begA + cntA] < b[begB + cntB],a[begA + cntA],丢弃a[begA ~ begA + cntA]共cntA + 1个元素
- a[begA + cntA] > b[begB + cntB],a[begA + cntA],丢弃b[begB ~ begB + cntB]共cntB + 1个元素
寻找两数组中第k大元素的函数如下:
1 | int findKth(int[] a, int[] b, int k, int begA, int endA, int begB, int endB) { |
寻找两数组中位数的主函数为:
1 | public double findMedianSortedArrays(int[] a, int[] b) { |