LEETCODE算法:4. 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)).
You may assume nums1 and nums2 cannot be both empty.
Example 1:
nums1 = [1, 3] nums2 = [2]
The median is 2.0 Example 2:
nums1 = [1, 2] nums2 = [3, 4]
The median is (2 + 3)/2 = 2.5
题解
1 | class Solution { |
说明
- 本题难点在于
O(log(m+n))
,否则双指针或者组成新数组排序的方法都可以解决,不过时间复杂度都是O(m+n)
O(log(m+n))
第一反应一般是二分查找现在有两个数组
A
和B
,分别由m
和n
的数(\(m,n\geq 0\)),假设我们在某位置切分A数组,使得A数组变为两部分各有i
和m-i
个数;以同样的方法在B
数组进行切分,使得B数组变为两部分各有j
和n-j
个数。要找到中位数,我们就要把A和B两个数组的分成这样的两部分,
i+j=m-i+n-j
(m+n为偶数)或i+j=m-i+n-j+1
(m+n为奇数) 这样保证左右两部分数组个数相等或相差1。a[i-1]<=b[j]
且b[j-1]<=a[i]
保证满足max(a,b左侧数组)>=min(a,b右侧数组)
a[i-1]>b[j]
表示a数组左侧部分最大值过大,i值应该减小,左移imax最大值变为i-1b[j-1]>a[i]
表示b数组左侧部分最大值过大,j应该减小,即i应该增加,imin增大为i+1i
或j
等于0时,maxleft就应该为b[j-1]或a[i-1]i
或j
等于m
或n
时,minright应该为b[j]或a[i]