用 Golang 实现,给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。
func findMedianSortedArrays(arr1 []int,arr2 []int) float64 {
//数组为空或1时
if len(arr1) == 0 && len(arr2) == 0{
return 0
}
if len(arr1) == 0 {
mid := len(arr2) / 2
if len(arr2) % 2 == 0 {
return float64(arr2[mid]+arr2[mid-1]) / 2
}else {
return float64(arr2[mid])
}
}
if len(arr2) == 0 {
findMedianSortedArrays(arr2,arr1)
}
k:= (len(arr1) + len(arr2)) / 2 + 1
p1, p2 := 0,0
slice := make([]int,0,k)
for i := 0; i < k; i++ {
if arr1[p1] < arr2[p2] {
slice = append(slice,arr1[p1])
p1++
if p1 >= len(arr1) {
for ;i < k-1;i++ {
slice = append(slice,arr2[p2])
}
}
}else {
slice = append(slice,arr2[p2])
p2++
if p2 < len(arr2) - 1 {
if p2 >= len(arr2) {
for ;i < k-1;i++ {
slice = append(slice,arr1[p1])
}
}
}
}
}
if (len(arr1) + len(arr2)) % 2 == 0 {
res := slice[k-2] + slice[k-1]
return float64(res) / 2
}else {
return float64(slice[k-1])
}
}