LeetCode No.169 Majority Element | #Hashmap #Boyer–Moore majority vote algorithm

Q:

Given an array of size n, find the majority element. The majority element is the element that appears more than ? n/2 ? times. You may assume that the array is non-empty and the majority element always exist in the array.

A:

使用Hashmap最基本的思路窥突。

public int majorityElement(int[] nums) {
    Map<Integer, Integer> myMap = new HashMap<Integer, Integer>();
    //Hashtable<Integer, Integer> myMap = new Hashtable<Integer, Integer>();
    int target = 0;
    for (int num: nums) {
        if (!myMap.containsKey(num))   //如果出現(xiàn)一個數(shù)之前不在map里
            myMap.put(num, 1);     //放進(jìn)去 <原值,計數(shù)>
        else
            myMap.put(num, myMap.get(num)+1);  //如果存在,計數(shù)+1

        if (myMap.get(num)>nums.length/2) {   
            target = num;
            break;                //不一定traverse整個nums,也許結(jié)果就出來了
        }
    }
    return target;
}

BoyerMoore majority vote algorithm
基本思路:最初設(shè)置兩個值,一個target压昼,一個count,分別進(jìn)行統(tǒng)計。target從選取nums[0]開始尸执,每當(dāng)計數(shù)變成0的時候,target值就會換缓醋。其實可以按“消除”的想法去理解如失,比如target值是3,連續(xù)出現(xiàn)了四次送粱,那么這個時候count=4褪贵,但是連續(xù)又連續(xù)出現(xiàn)了五次不是3的值,那么count不僅被清0了抗俄,而且target的值也被替換了脆丁,從新開始統(tǒng)計。到最后动雹,都“消除”完了槽卫,還能成為target,說明具有數(shù)量上的優(yōu)勢胰蝠,也就是我們要找的“大量”歼培、“總數(shù)過半”的值震蒋。


public int majorityElement(int[] num) {
    int target = num[0], count = 1;
    
    for(int i = 1; i < num.length;i++){
        if(major == num[i]){
            count ++;
        }
        else if(count == 0){
            count ++;
            target = num[i];
        }
        else count --;        
    }

    return target;
}

test case: {5,4躲庄,3查剖,3,7噪窘,3笋庄,1,3倔监,3} total: 9直砂,length:9

target count point to index (i) point to value (num[i])
5 1 1 4
5 0 2 3
3 1 3 3
3 2 4 7
3 1 5 3
3 2 6 1
3 1 7 3
3 2 8 3

同樣的算法,下面這個代碼更好:

public int majorityElement(int[] nums) {
    int target = 0, count = 0;
    for (int num: nums) {
        if (count == 0)
            target = num;    //每次target值被賦值替換完丐枉,下面的判斷直接進(jìn)行計數(shù)累加哆键,0-->1
        
        if (num != target)
            count --;
        else
            count ++;
    }
    return target;
}

test case: {5,4瘦锹,3籍嘹,3,7弯院,3辱士,1,3听绳,3} total: 9颂碘,length:9

major count point to index (i) point to value (num[i])
0 0 0 5
5 1 1 4
5 0 2 3
3 1 3 3
3 2 4 7
3 1 5 3
3 2 6 1
3 1 7 3
3 2 8 3

注:
兩個表格,得出的結(jié)果一樣椅挣,只不過起點不一樣头岔。
表格前兩列是(再次)進(jìn)入for循環(huán)之前的值,后兩列是進(jìn)入for之后要與前兩列去比較的值鼠证,比較完之后峡竣,根據(jù)判斷語句得出的結(jié)果,寫入下一行的前兩列量九。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末适掰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子荠列,更是在濱河造成了極大的恐慌类浪,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肌似,死亡現(xiàn)場離奇詭異费就,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)川队,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門力细,熙熙樓的掌柜王于貴愁眉苦臉地迎上來垦搬,“玉大人,你說我怎么就攤上這事艳汽。” “怎么了对雪?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵河狐,是天一觀的道長。 經(jīng)常有香客問我瑟捣,道長馋艺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任迈套,我火速辦了婚禮捐祠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘桑李。我一直安慰自己踱蛀,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布贵白。 她就那樣靜靜地躺著率拒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪禁荒。 梳的紋絲不亂的頭發(fā)上猬膨,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機(jī)與錄音呛伴,去河邊找鬼勃痴。 笑死,一個胖子當(dāng)著我的面吹牛热康,可吹牛的內(nèi)容都是我干的沛申。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼褐隆,長吁一口氣:“原來是場噩夢啊……” “哼污它!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起庶弃,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤衫贬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后歇攻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體固惯,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年缴守,在試婚紗的時候發(fā)現(xiàn)自己被綠了葬毫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镇辉。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖贴捡,靈堂內(nèi)的尸體忽然破棺而出忽肛,到底是詐尸還是另有隱情,我是刑警寧澤烂斋,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布屹逛,位于F島的核電站,受9級特大地震影響汛骂,放射性物質(zhì)發(fā)生泄漏罕模。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一帘瞭、第九天 我趴在偏房一處隱蔽的房頂上張望淑掌。 院中可真熱鬧,春花似錦蝶念、人聲如沸抛腕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽兽埃。三九已至,卻和暖如春适袜,著一層夾襖步出監(jiān)牢的瞬間柄错,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工苦酱, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留售貌,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓疫萤,卻偏偏與公主長得像颂跨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子扯饶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

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