2020-03-13 (lc-169)多數(shù)元素

給定一個(gè)大小為 n 的數(shù)組且轨,找到其中的多數(shù)元素毛肋。多數(shù)元素是指在數(shù)組中出現(xiàn)次數(shù)大于 ? n/2 ? 的元素梨水。你可以假設(shè)數(shù)組是非空的老客,并且給定的數(shù)組總是存在多數(shù)元素僚饭。

示例 1:
輸入: [3,2,3]
輸出: 3
示例 2:
輸入: [2,2,1,1,1,2,2]
輸出: 2

來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/majority-element
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán)胧砰,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處鳍鸵。

來(lái)自lc的一道Easy題目,大概在一年前做過(guò)尉间,當(dāng)時(shí)的方法很樸素权纤,我把提交貼下面。


現(xiàn)在一看確實(shí)很青澀乌妒。不管在時(shí)間還是空間上都沒(méi)有多大優(yōu)勢(shì)汹想。主要想法是用hash表存數(shù)據(jù),其實(shí)內(nèi)存上耗費(fèi)也不是很大撤蚊。

寫(xiě)這篇文章主要說(shuō)一下其他的思路古掏。分享幾個(gè)很好玩的想法。

1. 排序取中

class Solution {
      public int majorityElement(int[] nums) {
        Arrays.sort(nums);
        return nums[nums.length/2];
    }
}

至于這個(gè)方法侦啸,其實(shí)是一種比較簡(jiǎn)單且巧妙的方法槽唾,一年之前看到這個(gè)方法的時(shí)候就很驚艷,一年之后再看到這道題光涂,腦海里立馬復(fù)現(xiàn)的也是這個(gè)方法庞萍。
使用這個(gè)方法有一個(gè)前提條件,就是題目中所描述的 你可以假設(shè)數(shù)組是非空的忘闻,并且給定的數(shù)組總是存在多數(shù)元素钝计。,首先明確定義,多數(shù)是 占 n/2 以上的數(shù)私恬,并不是眾數(shù)债沮。 所以排序后,如果某個(gè)數(shù)數(shù)量多于一半本鸣,那么這個(gè)數(shù)一定在一半位置上有存在疫衩。那么這個(gè)也是這個(gè)算法的巧妙之處。

2. 摩爾投票法

這邊引用網(wǎng)上的例子來(lái)描述一下荣德。

核心就是對(duì)拼消耗闷煤。
玩一個(gè)諸侯爭(zhēng)霸的游戲,假設(shè)你方人口超過(guò)總?cè)丝谝话胍陨箱陶埃⑶夷鼙WC每個(gè)人口出去干仗都能一對(duì)一同歸于盡鲤拿。最后還有人活下來(lái)的國(guó)家就是勝利。
那就大混戰(zhàn)唄饲宛,最差所有人都聯(lián)合起來(lái)對(duì)付你(對(duì)應(yīng)你每次選擇作為計(jì)數(shù)器的數(shù)都是眾數(shù)),或者其他國(guó)家也會(huì)相互攻擊(會(huì)選擇其他數(shù)作為計(jì)數(shù)器的數(shù))嗜价,但是只要你們不要內(nèi)斗艇抠,最后肯定你贏。
最后能剩下的必定是自己人久锥。

這里面的內(nèi)容就是對(duì)拼和消耗家淤。
如一個(gè)數(shù)組。A = [2,2,1,1,1,2,2]
我們可以假設(shè)我方是2瑟由,敵方是1絮重,那么2多,最后一定勝出歹苦。
那就從第一個(gè)A[0] = 2開(kāi)始青伤,遇到自己人就加一,遇到敵人就減一殴瘦,好比打仗狠角,碰到自己人,隊(duì)伍就壯大蚪腋,遇到敵人就互相kill丰歌。到A[3] = 1 的時(shí)候,2211正好相互抵消屉凯,本輪結(jié)束立帖,繼續(xù)后面的 此時(shí)1變主場(chǎng),然后與2比拼悠砚,沒(méi)成想最后還有一個(gè)2晓勇,最終我方勝利。

在代碼中的體現(xiàn)如下。

 public int majorityElement(int[] nums) {
        int count = 1;
        int maj = nums[0];
        for (int i = 1; i < nums.length; i++) {
            if (maj == nums[i])
                count++;
            else {
                count--;
                if (count == 0) {
                    maj = nums[i + 1];
                }
            }
        }
        return maj;
 }

上面介紹了幾種思想宵蕉,后兩種比較巧妙酝静,可以詳細(xì)研究一下。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末羡玛,一起剝皮案震驚了整個(gè)濱河市别智,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌稼稿,老刑警劉巖薄榛,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異让歼,居然都是意外死亡敞恋,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)谋右,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)硬猫,“玉大人,你說(shuō)我怎么就攤上這事改执⌒ッ郏” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵辈挂,是天一觀的道長(zhǎng)衬横。 經(jīng)常有香客問(wèn)我,道長(zhǎng)终蒂,這世上最難降的妖魔是什么蜂林? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮拇泣,結(jié)果婚禮上噪叙,老公的妹妹穿的比我還像新娘。我一直安慰自己霉翔,他們只是感情好构眯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著早龟,像睡著了一般惫霸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上葱弟,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天壹店,我揣著相機(jī)與錄音,去河邊找鬼芝加。 笑死硅卢,一個(gè)胖子當(dāng)著我的面吹牛射窒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播将塑,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼脉顿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了点寥?” 一聲冷哼從身側(cè)響起艾疟,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎敢辩,沒(méi)想到半個(gè)月后蔽莱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡戚长,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年盗冷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片同廉。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仪糖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出迫肖,到底是詐尸還是另有隱情锅劝,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布咒程,位于F島的核電站鸠天,受9級(jí)特大地震影響讼育,放射性物質(zhì)發(fā)生泄漏帐姻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一奶段、第九天 我趴在偏房一處隱蔽的房頂上張望饥瓷。 院中可真熱鬧,春花似錦痹籍、人聲如沸呢铆。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)棺克。三九已至,卻和暖如春线定,著一層夾襖步出監(jiān)牢的瞬間娜谊,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工斤讥, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纱皆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像派草,于是被迫代替她去往敵國(guó)和親搀缠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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

  • 由于個(gè)人精力有限近迁,文章是從個(gè)人博客拷貝過(guò)來(lái)的艺普,如果文章格式和鏈接跳轉(zhuǎn)有問(wèn)題,還請(qǐng)見(jiàn)諒钳踊!也可以在我的個(gè)人博客觀看衷敌。另...
    SirWwh閱讀 659評(píng)論 0 0
  • 給定一個(gè)大小為 n 的數(shù)組,找到其中的多數(shù)元素拓瞪。多數(shù)元素是指在數(shù)組中出現(xiàn)次數(shù)大于 ? n/2 ? 的元素缴罗。你可以假...
    小王子特洛伊閱讀 711評(píng)論 0 0
  • 2019 iOS面試題大全---全方面剖析面試2018 iOS面試題---算法相關(guān)1、七種常見(jiàn)的數(shù)組排序算法整理(...
    Theendisthebegi閱讀 3,914評(píng)論 1 8
  • 簡(jiǎn)述 極客時(shí)間算法40講中所出現(xiàn)的leetcode算法題 題目 【鏈表】reverse-linked-list(反...
    BestbpF閱讀 4,475評(píng)論 0 4
  • 1祭埂、題目描述 給定一個(gè)大小為 n 的數(shù)組面氓,找到其中的眾數(shù)。眾數(shù)是指在數(shù)組中出現(xiàn)次數(shù)大于 ? n/2 ? 的元素蛆橡。你...
    hfk閱讀 1,855評(píng)論 0 4