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

72 阅读1分钟

思路一:

错误:数组 1 的中位数+数组 2 的中位数

比如 12 34 中位数 2.5,但是 123 4 中位数 3

思路二:

合并数组,取中位数,合并到一半+1 的时候,就知道中位数了

func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {
    i, j := 0, 0
    var sum []int
    total := len(nums1) + len(nums2)
    sumCount := 0
    for (i < len(nums1) || j < len(nums2)) && sumCount <= total/2 {
        if i < len(nums1) && j >= len(nums2) {
            //取i
            sum = append(sum, nums1[i])
            i++
        } else if j < len(nums2) && i >= len(nums1) {
            //取j
            sum = append(sum, nums2[j])
            j++
        } else {
            //取两个最小的
            //err:应该选一个加入,然后一个下标++
            //sum = append(sum, min(nums1[i], nums2[j]))
            //i++
            //j++
            minVal:=min(nums1[i], nums2[j])
            sum = append(sum, minVal)
            if minVal==nums1[i]{
                i++
            }else {
                j++
            }
        }
        sumCount++
    }
    //边界条件
    if sumCount < 2 {
        return float64(sum[0])
    }

    //取倒数第二一位或者最后两位的平均值
    if total%2 != 0 {
        return float64(sum[sumCount-1])
    }
    return (float64(sum[sumCount-1]) + float64(sum[sumCount-2])) / 2
}

func min(x, y int) int {
    //取最小值
    if x < y {
        return x
    }
    return y
}

思路三:二分查找

方法比较难。。后续再做