4_困难_寻找两个正序数组的中位数
4:寻找两个正序数组的中位数
https://leetcode.cn/problems/median-of-two-sorted-arrays/
算法:
// date 2022-09-09
func findMedianSortedArrays(nums1, nums2 []int) float64 {
s1, s2 := len(nums1), len(nums2)
total := s1+s2
if total == 0 {
return 0
}
targetIdx := total/2
onlyOne := total % 2 == 1
// 如果nums1为空,在nums2中查找中位数
if s1 == 0 {
if onlyOne {
return float64(nums2[targetIdx])
} else {
return (float64(nums2[targetIdx-1]) + float64(nums2[targetIdx]))/2
}
}
// 如果nums2为空,在nums1中查找中位数
if s2 == 0 {
if onlyOne {
return float64(nums1[targetIdx])
} else {
return (float64(nums1[targetIdx-1]) + float64(nums1[targetIdx]))/2
}
}
pre, cur := 0, 0 // 记录合成数组的两个值
i, j, nIdx := 0, 0, 0
// 开始遍历并记录pre,cur
// nidx为合成数组的索引
for i < s1 && j < s2 {
if nums1[i] < nums2[j] {
pre, cur = cur, nums1[i]
i++
} else {
pre, cur = cur, nums2[j]
j++
}
if nIdx == targetIdx {
if onlyOne {
return float64(cur)
}
return (float64(pre)+float64(cur))/2
}
nIdx++
}
for i < s1 {
pre, cur = cur, nums1[i]
i++
if nIdx == targetIdx {
if onlyOne {
return float64(cur)
}
return (float64(pre)+float64(cur))/2
}
nIdx++
}
for j < s2 {
pre, cur = cur, nums2[j]
j++
if nIdx == targetIdx {
if onlyOne {
return float64(cur)
}
return (float64(pre)+float64(cur))/2
}
nIdx++
}
if onlyOne {
return float64(cur)
}
return (float64(pre)+float64(cur))/2
}
最后更新于