概述
目的是返回两个排序数组的中间值。例如,如果输入是
[1,5]
[3,4,6]
那么中位数是4,因为如果我们对两个数组进行排序,那么4就在中间。
[1,3,4,5,6]
如果总元素的数量是偶数呢。也就是说,如果两个数组的总长度是偶数。在这种情况下,中位数是
(n/2 + (n/2 +1 ))/2
其中n是两个数组的总长度
例如,如果输入的是
[1,2]
[3,4]
那么中位数是**(2+3)/2=2.5**,因为如果我们对两个数组进行排序,那么2和3就在中间。
[1,2,3,4]
因此,如果两个数组的总长度为n,那么有两种情况
-
如果n是奇数,那么中位数就在n/2+1的位置上
-
如果n是偶数,那么中位数在**(n/2+(n/2+1))/2**的位置。
程序
package main
import "fmt"
func main() {
median := findMedianSortedArrays([]int{1, 2}, []int{3, 4})
fmt.Println(median)
}
func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {
firstArrayLen := len(nums1)
secondArrayLen := len(nums2)
var mid int
i := 0
j := 0
var k int
mid = (firstArrayLen+secondArrayLen)/2 + 1
//This is the case in which the total lenght of two arrays is odd and there is only one median
if (firstArrayLen+secondArrayLen)%2 == 1 {
var median float64
for k < mid {
if i < firstArrayLen && j < secondArrayLen {
if nums1[i] <= nums2[j] {
median = float64(nums1[i])
i++
k++
} else {
median = float64(nums2[j])
j++
k++
}
} else if i < firstArrayLen {
median = float64(nums1[i])
i++
k++
} else {
median = float64(nums2[j])
j++
k++
}
}
return median
} else { //This is the case in which the total lenght of two arrays is even and there is only two medians. We need to return average of these two medians
var median1 float64
var median2 float64
for k < mid {
median1 = median2
if i < firstArrayLen && j < secondArrayLen {
if nums1[i] <= nums2[j] {
median2 = float64(nums1[i])
i++
k++
} else {
median2 = float64(nums2[j])
j++
k++
}
} else if i < firstArrayLen {
median2 = float64(nums1[i])
i++
k++
} else {
median2 = float64(nums2[j])
j++
k++
}
}
return (median1 + median2) / 2
}
}
输出
2.5