劍指Offer-數(shù)組中出現(xiàn)次數(shù)超過(guò)一半的數(shù)字

描述:

數(shù)組中有一個(gè)數(shù)字出現(xiàn)的次數(shù)超過(guò)數(shù)組長(zhǎng)度的一半夹界,請(qǐng)找出這個(gè)數(shù)字赌莺。
例如:輸入一個(gè)長(zhǎng)度為9的數(shù)組{1,2,3,2,2,2,5,4,2}南蹂。
由于數(shù)字2在數(shù)組中出現(xiàn)了5次算凿,超過(guò)數(shù)組長(zhǎng)度的一半,因此輸出2忆畅。如果不存在則輸出0衡未。

分析:

由于一個(gè)數(shù)字出現(xiàn)的次數(shù)超過(guò)數(shù)組長(zhǎng)度的一半,則說(shuō)明該數(shù)字一定是這個(gè)數(shù)組中出現(xiàn)次數(shù)最多的元素邻眷。那么這個(gè)題目可以轉(zhuǎn)化為兩個(gè)步驟:

  1. 尋找數(shù)組中出現(xiàn)次數(shù)最多的元素眠屎;
  2. 查看該元素在數(shù)組中的出現(xiàn)次數(shù),若大于數(shù)組長(zhǎng)度的一半肆饶,則返回該元素改衩,反之則返回0

首先我們從簡(jiǎn)單的著手,統(tǒng)計(jì)數(shù)組中的一個(gè)元素出現(xiàn)的次數(shù)驯镊,十分簡(jiǎn)單葫督,只需要循環(huán)一個(gè)該數(shù)組,便可得到結(jié)果板惑。

接下來(lái)重點(diǎn)分析一下第一步橄镜,尋找數(shù)組中出現(xiàn)次數(shù)最多的元素,最簡(jiǎn)單的會(huì)想到利用一個(gè)輔助數(shù)組存儲(chǔ)該數(shù)組每一個(gè)元素出現(xiàn)的次數(shù)冯乘,從其中尋找最大的即可洽胶,然而這種方法的空間復(fù)雜度會(huì)非常高,如果出現(xiàn)的元素的數(shù)值非常大的話裆馒,會(huì)造成輔助數(shù)組的空間大量被浪費(fèi)姊氓。在這種情況下可以采用 Boyer-Moore Majority Vote Algorithm丐怯,這種算法可以達(dá)到時(shí)間復(fù)雜度為O(n),空間復(fù)雜度為O(1)翔横。

下面來(lái)介紹一下這個(gè)算法:
Boyer-Moore Majority Vote Algorithm(摩爾投票算法):
該算法是基于這個(gè)事實(shí):每次從序列里選擇兩個(gè)不相同的數(shù)字刪除掉(或稱為“抵消”)读跷,最后剩下一個(gè)數(shù)字或幾個(gè)相同的數(shù)字,就是出現(xiàn)次數(shù)大于總數(shù)一半的那個(gè)禾唁。

在代碼實(shí)現(xiàn)的時(shí)候效览,使用一個(gè)計(jì)數(shù)器count來(lái)統(tǒng)計(jì)一個(gè)元素出現(xiàn)的次數(shù),當(dāng)遍歷到的元素和統(tǒng)計(jì)元素相等時(shí)荡短,令 計(jì)數(shù)器加一丐枉,否則令計(jì)數(shù)器減一。如果前面查找了 i 個(gè)元素肢预,且 count == 0矛洞,說(shuō)明前 i 個(gè)元素沒(méi)有 majority,或者有 majority烫映,但是出現(xiàn)的次數(shù)少于 i / 2 ,因?yàn)槿绻嘤?i / 2 的話 cnt 就一定不會(huì)為 0 噩峦。此時(shí)剩下的 n - i 個(gè)元素中锭沟,majority 的數(shù)目依然多于 (n - i) / 2,因此繼續(xù)查找就能找出 majority识补。

代碼實(shí)現(xiàn):

 
public int MoreThanHalfNum_Solution(int [] array) {
        if (array.length==0||array==null)
        return 0;
        int majortiy=array[0];
        int count=1;
        //遍歷數(shù)組找到出現(xiàn)次數(shù)最多的元素
        for (int i=1;i<array.length;i++){
            if (array[i]==majortiy)
                count++;
            else
                count--;
            //此時(shí)說(shuō)明族淮,數(shù)量最多的元素不存在或者不超過(guò)半數(shù)
            if (count==0){
                majortiy=array[i];
                count=1;
            }

        }
        //將計(jì)數(shù)器清零
        count=0;
        //再次遍歷數(shù)組,統(tǒng)計(jì)出現(xiàn)最多元素的數(shù)量
        for (int e:array){
            if (e==majortiy){
                count++;
            }
        }
        if (count>array.length/2)
            return majortiy;
        else return 0;



    }

題目鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凭涂,一起剝皮案震驚了整個(gè)濱河市祝辣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌切油,老刑警劉巖蝙斜,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異澎胡,居然都是意外死亡孕荠,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門攻谁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)稚伍,“玉大人,你說(shuō)我怎么就攤上這事戚宦「鍪铮” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵受楼,是天一觀的道長(zhǎng)垦搬。 經(jīng)常有香客問(wèn)我祠挫,道長(zhǎng),這世上最難降的妖魔是什么悼沿? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任等舔,我火速辦了婚禮,結(jié)果婚禮上糟趾,老公的妹妹穿的比我還像新娘慌植。我一直安慰自己,他們只是感情好义郑,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布蝶柿。 她就那樣靜靜地躺著,像睡著了一般非驮。 火紅的嫁衣襯著肌膚如雪交汤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天劫笙,我揣著相機(jī)與錄音芙扎,去河邊找鬼。 笑死填大,一個(gè)胖子當(dāng)著我的面吹牛戒洼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播允华,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼圈浇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了靴寂?” 一聲冷哼從身側(cè)響起磷蜀,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎百炬,沒(méi)想到半個(gè)月后褐隆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡收壕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年妓灌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜜宪。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡虫埂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出圃验,到底是詐尸還是另有隱情掉伏,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站斧散,受9級(jí)特大地震影響供常,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鸡捐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一栈暇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧箍镜,春花似錦源祈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至歇僧,卻和暖如春图张,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诈悍。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工祸轮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人写隶。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓倔撞,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親慕趴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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