4. 寻找两个正序数组的中位数
给定两个大小分别为 m
和 n
的正序(从小到大)数组 nums1
和 nums2
。请你找出并返回这两个正序数组的 中位数 。
示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {
m,n := len(nums1),len(nums2)
if m>n{
return findMedianSortedArrays(nums2,nums1)
}
iMin ,iMax,laftLen := 0,m,(n+m+1)/2
for iMin <= iMax{
i := iMin + (iMax-iMin)/2
j := laftLen - i
if i > iMin && nums1[i-1] > nums2[j]{
iMax = i - 1
} else if i < iMax && nums2[j-1] > nums1[i]{
iMin = i + 1
} else{
leftMax := 0
if i == 0{
leftMax = nums2[j-1]
}else if j == 0{
leftMax = nums1[i-1]
}else{
leftMax = max(nums1[i-1],nums2[j-1])
}
if (m+n)%2 != 0{
return float64(leftMax)
}
rightMin := 0
if i == m {
rightMin = nums2[j]
}else if j == n{
rightMin = nums1[i]
}else{
rightMin = min(nums1[i],nums2[j])
}
return float64(leftMax+rightMin)/2.0
}
}
return 0.0
}
func max(a,b int)int{
if a > b{
return a
}else{
return b
}
}
func min(a,b int )int{
if a > b{
return b
}else{
return a
}
}