[leetcode] 寻找两个有序数组的中位数

寻找两个有序数组的中位数

Posted by Lerko on April 17, 2020

寻找两个有序数组的中位数

给定一个二叉树,返回它的中序 遍历。

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。

请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。

你可以假设 nums1 和 nums2 不会同时为空。

示例 1:

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 {
    nums := []int{}
    nums1Position := 0
    nums2Position := 0
    max := 0
    if (len(nums1)+len(nums2)) % 2 == 0 {
        max = (len(nums1)+len(nums2))/2 + 1
    }else{
        max = (len(nums1)+len(nums2))/2 + 1
    }
    for i:=0;i < max;i++ {
        var nums1Val,nums2Val int
        if nums1Position > len(nums1) - 1 {
            nums = append(nums,nums2[nums2Position])
            nums2Position++
            continue;
        }else{
            nums1Val = nums1[nums1Position]
        }
        if nums2Position > len(nums2) - 1 {
            nums = append(nums,nums1[nums1Position])
            nums1Position++
            continue;
        }else{
            nums2Val = nums2[nums2Position]
        }
        // fmt.Println(nums1Val,nums2Val,nums1Position,nums2Position)
        if nums1Val < nums2Val {
            nums = append(nums,nums1Val)
            nums1Position++
        }else{
            nums = append(nums,nums2Val)
            nums2Position++
        }
    }
    // fmt.Println(nums)
    if (len(nums1)+len(nums2)) % 2 != 0 {
        return float64(nums[len(nums)-1])
    }else{
        return float64((nums[len(nums)-1] + nums[len(nums)-2]))/2
    }
}