[leetcode]4. 尋找兩個(gè)有序數(shù)組的中位數(shù)

題目描述:

難度:困難

給定兩個(gè)大小為 m 和 n 的有序數(shù)組 nums1 和 nums2。
請(qǐng)你找出這兩個(gè)有序數(shù)組的中位數(shù)刹淌,并且要求算法的時(shí)間復(fù)雜度為 O(log(m + n))葱蝗。
你可以假設(shè) nums1 和 nums2 不會(huì)同時(shí)為空忍些。

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

解題思路:

此題雖然定義難度為“困難”觉吭,但可能因?yàn)槲覍?duì)選擇排序算法比較熟悉,并沒有覺得這題有多難憔古。很快就反應(yīng)出解題思路:先定義兩個(gè)變量i和j分別指向數(shù)組nums1和nums2的頭部遮怜,分別移動(dòng)i、j來(lái)遍歷兩個(gè)數(shù)組鸿市,誰(shuí)對(duì)應(yīng)的元素比較小就移動(dòng)誰(shuí)锯梁,這樣移動(dòng)下來(lái)的順序就是兩個(gè)數(shù)組合并在一起的排序。對(duì)于有序的合并數(shù)組焰情,如果合并數(shù)組長(zhǎng)度為奇數(shù)陌凳,則中間的數(shù)字就是中位數(shù),對(duì)應(yīng)的全局索引為(m+n)/2烙样;如果合并數(shù)組的長(zhǎng)度為偶數(shù)冯遂,則中間的兩個(gè)數(shù)字就是中位數(shù),對(duì)應(yīng)的全局索引為(m+n)/2和(m+n)/2-1谒获,對(duì)這兩個(gè)數(shù)字求平均即可得最終結(jié)果蛤肌。

該題目比較值得注意的一點(diǎn)是:對(duì)于異常處理的考慮,也就是nums1為空或者nums2為空的情況批狱,以及各自只有一個(gè)元素的情況裸准。最后,當(dāng)各自只有一個(gè)元素時(shí)赔硫,是num1[0]>=nums2[0]還是相反炒俱。這些情況都測(cè)試沒問(wèn)題了,才能算是沒問(wèn)題爪膊。

另一種思路是采用二分查找和遞歸的方式來(lái)做权悟,不斷的排除掉不可能的數(shù)字,剩下的就是最終結(jié)果推盛,這種思路回頭有空再來(lái)補(bǔ)齊峦阁。

笨方法:

class Solution(object):
    def findMedianSortedArrays(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: float
        """
        m,n=len(nums1),len(nums2)
        i,j,cnt,ans=0,0,0,0 #nums1,nums2的索引
        while i<m or j<n:
            pre_ans=ans
            if j>=n or (i<m and j<n and nums1[i]<=nums2[j]):
                ans=nums1[i]
                i+=1
            else:
                ans=nums2[j]
                j+=1
            if (m+n)%2==1:
                if cnt==int((m+n)/2):
                    return ans*1.0
            else:
                if cnt==int((m+n)/2):
                    return (ans+pre_ans)*1.0/2
            cnt+=1
        return 0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市耘成,隨后出現(xiàn)的幾起案子榔昔,更是在濱河造成了極大的恐慌,老刑警劉巖瘪菌,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撒会,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡师妙,警方通過(guò)查閱死者的電腦和手機(jī)诵肛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)疆栏,“玉大人曾掂,你說(shuō)我怎么就攤上這事惫谤。” “怎么了珠洗?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵溜歪,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我许蓖,道長(zhǎng)蝴猪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任膊爪,我火速辦了婚禮自阱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘米酬。我一直安慰自己沛豌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布赃额。 她就那樣靜靜地躺著加派,像睡著了一般。 火紅的嫁衣襯著肌膚如雪跳芳。 梳的紋絲不亂的頭發(fā)上芍锦,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音飞盆,去河邊找鬼娄琉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛吓歇,可吹牛的內(nèi)容都是我干的孽水。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼城看,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼匈棘!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起析命,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逃默,沒想到半個(gè)月后鹃愤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡完域,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年软吐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吟税。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凹耙,死狀恐怖姿现,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肖抱,我是刑警寧澤备典,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站意述,受9級(jí)特大地震影響提佣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荤崇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一拌屏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧术荤,春花似錦倚喂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至带兜,卻和暖如春枫笛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背刚照。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工刑巧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人无畔。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓啊楚,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親浑彰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子恭理,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容