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)).
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
//(待重构)
func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {
n1 := len(nums1)
n2 := len(nums2)
var i1 int = 0
var i2 int = 0
media1, media2 := getindex(n1, n2)
var media1value int
for i1 < n1 && i2 < n2 {
if nums1[i1] < nums2[i2] {
if (i1+i2 == media1) {
if (media1 == media2) {
return float64(nums1[i1]+nums1[i1]) / float64(2)
} else {
media1value = nums1[i1]
}
}
if (i1+i2 == media2) {
return float64(media1value+nums1[i1]) / float64(2)
}
i1++
} else {
if (i1+i2 == media1) {
if (media1 == media2) {
return float64(nums2[i2]+nums2[i2]) / float64(2)
} else {
media1value = nums2[i2]
}
}
if (i1+i2 == media2) {
return float64(media1value+nums2[i2]) / float64(2)
}
i2++
}
}
for i1<n1{
if (i1+i2 == media1) {
if (media1 == media2) {
return float64(nums1[i1]+nums1[i1]) / float64(2)
} else {
media1value = nums1[i1]
}
}
if (i1+i2 == media2) {
return float64(media1value+nums1[i1]) / float64(2)
}
i1++
}
for i2<n2{
if (i1+i2 == media1) {
if (media1 == media2) {
return float64(nums2[i2]+nums2[i2]) / float64(2)
} else {
media1value = nums2[i2]
}
}
if (i1+i2 == media2) {
return float64(media1value+nums2[i2]) / float64(2)
}
i2++
}
return 0
}
func getindex(n1 int,n2 int)(int,int){
if (n1+n2)%2==0{
return (n1+n2)/2-1,(n1+n2)/2
}else{
return (n1+n2)/2,(n1+n2)/2
}
}