题目描述
给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。
请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。
示例
nums1 = [1, 3] nums2 = [2]
则中位数是 2.0 示例 2:
nums1 = [1, 2] nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5
|
解法
func findMedianSortedArrays(nums1 []int, nums2 []int) float64 { var ( nums []int minNum int index int index1 int index2 int m float64 ) nums1Len, nums2Len := len(nums1), len(nums2) numsTotal := nums1Len + nums2Len for index = 0; index < numsTotal; index++ { if index > numsTotal/2 { break } if index1 < nums1Len && index2 < nums2Len { if nums1[index1] < nums2[index2] { minNum = nums1[index1] index1++ } else { minNum = nums2[index2] index2++ } } else if index1 < nums1Len { minNum = nums1[index1] index1++ } else if index2 < nums2Len { minNum = nums2[index2] index2++ } else { } nums = append(nums, minNum) } if numsTotal%2 != 0 { m = float64(nums[index-1]) } else { m = float64(nums[index-1]+nums[index-2]) / 2 } return m }
|
本地测试
package main
import "fmt"
func main() { a, b := []int{1, 3}, []int{2} fmt.Println(findMedianSortedArrays(a, b)) a, b = []int{1, 2}, []int{3, 4, 5} fmt.Println(findMedianSortedArrays(a, b)) a, b = []int{1, 4}, []int{2, 3} fmt.Println(findMedianSortedArrays(a, b)) a, b = []int{1, 4, 5, 9}, []int{2, 3, 8, 10} fmt.Println(findMedianSortedArrays(a, b)) }
|
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays