LeetCode-python 4.尋找兩個有序數(shù)組的中位數(shù)

題目鏈接

難度:困難 ??????類型: 數(shù)組


給定兩個大小為 m 和 n 的有序數(shù)組 nums1 和 nums2。

請你找出這兩個有序數(shù)組的中位數(shù)莫秆,并且要求算法的時間復雜度為 O(log(m + n))娶眷。

你可以假設 nums1 和 nums2 不會同時為空档址。

示例1

nums1 = [1, 3]
nums2 = [2]
則中位數(shù)是 2.0

示例2

nums1 = [1, 2]
nums2 = [3, 4]
則中位數(shù)是 (2 + 3)/2 = 2.5

解題思路


將問題廣義化為尋找兩個數(shù)組中第K小的數(shù)

設兩個數(shù)組num1, num2的長度分別為l1, l2
當l1+l2為奇數(shù)年叮,k=(l1+l2)//2
當l1+l2為偶數(shù)锉试,分別找到第(l1+l2)//2-1和第(l1+l2)//2個數(shù)求均值

如何找第k個數(shù)瘸洛?
二分法揍移,每次將兩個數(shù)組分成兩半,中位數(shù)分別為m1和m2,中位數(shù)的下標分別為i1和i2

  • 若i1+i2<k反肋,即第k個數(shù)一定不在某個數(shù)組的前半部分那伐,當m1>m2時,第k個數(shù)一定不在nums2的前半部分石蔗,下一次搜索改為在nums1和nums2的后半部分里尋找第k-i2-1個數(shù)罕邀;當m1<=m2時,同理,問題變?yōu)樵趎ums1的后半部分和nums2里尋找第k-i1-1個數(shù)

  • 若i1+i2>=k养距,即第k個數(shù)一定不在某個數(shù)組的后半部分诉探,當m1>m2時,第k個數(shù)一定不在nums1的后半部分棍厌,問題變?yōu)檎缶撸趎ums1的前半部分和nums2中尋找第k個數(shù);反之不在nums2的后半部分定铜,問題也相應改變阳液,這樣搜索的范圍就減小了

代碼實現(xiàn)

class Solution(object):
    def findMedianSortedArrays(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: float
        """
        n = len(nums1)+len(nums2)
        if n%2==1:
            return self.findKth(nums1, nums2, n//2)
        else:
            return (self.findKth(nums1, nums2, n//2)+self.findKth(nums1, nums2, n//2-1))/2
        
    def findKth(self, nums1, nums2, k):
        if not nums1:
            return nums2[k]
        if not nums2:
            return nums1[k]
        i1, i2 = len(nums1)//2, len(nums2)//2
        print(i1,i2)
        m1, m2 = nums1[i1], nums2[i2]
        
        if i1 + i2 < k:
            if m1 > m2:
                self.findKth(nums1, nums2[i2+1], k-i2-1)
            else: 
                self.findKth(nums1[i1+1:], nums2, k-i1-1)
        else:
            if m1 > m2:
                self.findKth(nums1[:i1], nums2, k)
            else:
                self.findKth(nums1, nums2[:i2], k)

本文鏈接:http://www.reibang.com/p/15239884df4f

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市揣炕,隨后出現(xiàn)的幾起案子帘皿,更是在濱河造成了極大的恐慌,老刑警劉巖畸陡,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹰溜,死亡現(xiàn)場離奇詭異,居然都是意外死亡丁恭,警方通過查閱死者的電腦和手機曹动,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牲览,“玉大人墓陈,你說我怎么就攤上這事。” “怎么了贡必?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵兔港,是天一觀的道長。 經常有香客問我仔拟,道長衫樊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任利花,我火速辦了婚禮科侈,結果婚禮上,老公的妹妹穿的比我還像新娘炒事。我一直安慰自己臀栈,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布羡洛。 她就那樣靜靜地躺著挂脑,像睡著了一般藕漱。 火紅的嫁衣襯著肌膚如雪欲侮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天肋联,我揣著相機與錄音威蕉,去河邊找鬼。 笑死橄仍,一個胖子當著我的面吹牛韧涨,可吹牛的內容都是我干的。 我是一名探鬼主播侮繁,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼虑粥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宪哩?” 一聲冷哼從身側響起娩贷,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锁孟,沒想到半個月后彬祖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡品抽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年储笑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片圆恤。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡突倍,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情赘方,我是刑警寧澤烧颖,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站窄陡,受9級特大地震影響炕淮,放射性物質發(fā)生泄漏。R本人自食惡果不足惜跳夭,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一涂圆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧币叹,春花似錦润歉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至贩汉,卻和暖如春驱富,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匹舞。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工褐鸥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赐稽。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓叫榕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親姊舵。 傳聞我的和親對象是個殘疾皇子晰绎,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內容