o0w0o / ARTS

ARTS 鸽友打卡🐦
2 stars 0 forks source link

Median of Two Sorted Arrays #148

Open hyponet opened 4 years ago

hyponet commented 4 years ago

年纪大了,连写个归并都这么费劲。

两个有序数组,找中位数,就是归并排,排到中间break,区分奇偶就可以。

func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {
    n1Len := len(nums1)
    n2Len := len(nums2)
    total := n1Len + n2Len
    if total == 0 {
        return 1
    }
    brkIndex := total / 2
    if total%2 == 1 {
        brkIndex += 1
    }

    var (
        n1Index int
        n2Index int
    )

    count := 0
    midNum := 0
    for n1Index < n1Len || n2Index < n2Len {
        var crtNum int

        if count == brkIndex {
            break
        }

        if n1Index < n1Len {

            if n2Index < n2Len {

                if nums1[n1Index] < nums2[n2Index] {
                    crtNum = nums1[n1Index]
                    n1Index += 1
                } else {
                    crtNum = nums2[n2Index]
                    n2Index += 1
                }

            } else {

                crtNum = nums1[n1Index]
                n1Index += 1

            }
        } else {

            crtNum = nums2[n2Index]
            n2Index += 1

        }

        midNum = crtNum
        count += 1
    }

    if total%2 == 1 {
        return float64(midNum)
    } else {
        var crtNum int
        if n1Index < len(nums1) {
            if n2Index < n2Len {
                if nums1[n1Index] < nums2[n2Index] {
                    crtNum = nums1[n1Index]
                } else {
                    crtNum = nums2[n2Index]
                }
            } else {
                crtNum = nums1[n1Index]
            }
        } else {
            crtNum = nums2[n2Index]
        }
        return float64(crtNum+midNum) / 2
    }

}