尋找兩個有序陣列的中位數

2021-09-26 20:56:20 字數 1258 閱讀 6351

題目.

很有意思

問題的關鍵在於,把尋找中位數變成尋找第k個數(中位數只是一種特殊情況)。可以假設這種場景:對於兩個陣列:第乙個陣列的前k/2個數和第二個陣列的前k/2個數,一定可以拋棄k/2個。假設第乙個陣列的第k/2個數小於第二個陣列的第k/2個數,那麼對第乙個陣列的前k/2個數來說,第k個數一定不會出現在這k/2個數中。可以利用反證法:

假設第k個數出現在第乙個陣列的前k/2中,比第k個數小的不超過k/2個,而第二個陣列中比第k個數小的數不到k/2,這樣總的比第k個數小的數就沒有k個,這就違背了邏輯。

package main

import

("fmt"

)func

findkthnum

(k int

, nums1 [

]int

, nums2 [

]int

)int

iflen

(nums2)==0

if k ==

1return nums1[0]

} half1 := k /2if

len(nums1)

< half1

half2 := k /2if

len(nums2)

< half2

fmt.

println

(k,len

(nums1)

,len

(nums2)

, half1, half2)

if nums1[half1-1]

< nums2[half2-1]

return

findkthnum

(k-half2, nums1, nums2[half2:])

}func

findmediansortedarrays

(nums1 [

]int

, nums2 [

]int

)float64

return

float64

(findkthnum

(count/2+

1, nums1, nums2))}

func

main()

,[]int))

}

o(log(m+n))

o(log(m+n))

執行用時 :16 ms, 在所有 go 提交中擊敗了93.16%的使用者

記憶體消耗 :5.7 mb, 在所有 go 提交中擊敗了62.71%的使用者

尋找兩個有序陣列的中位數

尋找兩個有序陣列的中位數 user hihone date 2019 1 31 time 16 32 description 給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 ...

尋找兩個有序陣列的中位數

思路 將兩個陣列排序,然後判斷陣列長度,長度為單數,則取二分之一處的數,否則取二分之一處和二分之一減一處的數之和除以2.var findmediansortedarrays function nums1,nums2 var mid math.floor arr.length 2 if arr.len...

尋找兩個有序陣列的中位數

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0示例 2 nums1 1,2 n...