摩爾投票法

題目描述

給定一個大小為 n 的數(shù)組,找出其中所有出現(xiàn)超過 ? n/2 ? 次的元素。

分析:采用摩爾投票法,兩個階段:抵消階段和計數(shù)階段

抵消階段:兩個不同投票進行對抗,并且同時抵消掉各一張票,如果兩個投票相同,則累加可抵消的次數(shù);

計數(shù)階段:在抵消階段最后得到的抵消計數(shù)只要不為 0,那這個候選人是有可能超過一半的票數(shù)的,為了驗證,則需要遍歷一次,統(tǒng)計票數(shù),才可確定

public static int majorityElement(int[] nums) {
        int len = nums.length;

        if (len==0){
            return -1;
        }

        int major = 0;
        int vote = 0;

        for (int num:nums){
            if (vote==0){
                major = num;
                vote = 1;
            }else {
                if (major==num){
                    vote++;
                }else {
                    vote--;
                }
            }
        }
        if (vote==0){
            return -1;
        }

        int flag = 0;
        for (int num:nums){
            if (major == num){
                flag ++;
                if (flag>len/2){
                    return major;
                }
            }
        }
        return -1;
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 摩爾投票法又叫多數(shù)投票法。 解決的問題如何在任意多的候選人中,選出獲得票數(shù)最多的那個 算法包括兩個階段 1. 對抗...
    缸里有綠粥閱讀 1,923評論 0 0
  • 摩爾投票法的基本問題 給定一個大小為 n 的數(shù)組,找到其中的多數(shù)元素。多數(shù)元素是指在數(shù)組中出現(xiàn)次數(shù)大于 ? n/2...
    9_SooHyun閱讀 202評論 0 1
  • 數(shù)組中占比超過一半的元素稱之為主要元素。給定一個整數(shù)數(shù)組,找到它的主要元素。若沒有,返回-1。 示例 1: 輸入:...
    修行者12138閱讀 449評論 0 0
  • 提問: 給定一個int型數(shù)組,找出該數(shù)組中出現(xiàn)次數(shù)大于數(shù)組長度一半的int值。 解決方案: 遍歷該數(shù)組,統(tǒng)計每個i...
    Jimmy5Zhang閱讀 10,385評論 3 5
  • 問題描述 給定一個大小為 n 的數(shù)組,找出其中所有出現(xiàn)超過 ? n/3 ? 次的元素。 說明: 要求算法的時間復(fù)雜...
    zsdy閱讀 744評論 0 0

友情鏈接更多精彩內(nèi)容