Leetcode-169:求眾數(shù)

題目描述:
給定一個(gè)大小為 n 的數(shù)組,找到其中的眾數(shù)。眾數(shù)是指在數(shù)組中出現(xiàn)次數(shù)大于 ? n/2 ? 的元素。

思路:

  1. Map存每個(gè)數(shù)出現(xiàn)次數(shù),大于n/2即為眾數(shù)
  2. Moore voting alogrithm:每次從數(shù)組中找出一對(duì)不同的元素,將它們從數(shù)組中刪除,直到遍歷完整個(gè)數(shù)組。由于這道題已經(jīng)說(shuō)明一定存在一個(gè)出現(xiàn)次數(shù)超過(guò)一半的元素,所以遍歷完數(shù)組后數(shù)組中一定會(huì)存在至少一個(gè)元素。
  3. 分治法,不斷把數(shù)組分成左右兩個(gè)數(shù)組,分別求兩個(gè)數(shù)組的眾數(shù),如果相等則返回此數(shù),如果不等則返回兩個(gè)數(shù)組合并后的真正的眾數(shù)。
class Solution {
    public int majorityElement(int[] nums) {
        return find(nums,0,nums.length-1);        
    }
    
        public static int find(int[] nums, int begin, int end){
        if (begin == end)
            return nums[begin];
        else {
            int mid = (begin+end)/2;
            int left = find(nums,begin,mid);
            int right = find(nums,mid+1,end);
 
            if(left == right)//左右兩部分的眾數(shù)相同 則這個(gè)數(shù)是這部分的眾數(shù)
                return left;
            else{//左右兩部分的眾數(shù)不相同 則這兩個(gè)數(shù)都有可能是這部分的眾數(shù)
                //那么遍歷這個(gè)數(shù)組 看一下哪個(gè)數(shù)字的出現(xiàn)頻率高
                int countLeft = 0;
                int countRight = 0;
                for (int i = begin; i <= end; i++)
                    if(nums[i] == left)
                        countLeft++;
                    else if (nums[i] == right)
                        countRight++;
 
                if(countLeft>countRight)
                    return left;
                else
                    return right;
            }
        }
    }
 
    
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 寫(xiě)在前沿:本文代碼均使用C語(yǔ)言編寫(xiě)。 Description:給定一個(gè)大小為n的數(shù)組,找到其中的眾數(shù)。眾數(shù)是指在數(shù)...
    小黃大大閱讀 625評(píng)論 0 1
  • 題目 https://leetcode-cn.com/problems/majority-element/ 給定一...
    FlyCharles閱讀 170評(píng)論 0 0
  • 一些概念 數(shù)據(jù)結(jié)構(gòu)就是研究數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)以及它們之間相互關(guān)系,并對(duì)這種結(jié)構(gòu)定義相應(yīng)的運(yùn)算,而且確保經(jīng)過(guò)這...
    Winterfell_Z閱讀 6,597評(píng)論 0 13
  • GIthub簡(jiǎn)書(shū)CSDN 題目 給定一個(gè)大小為 n 的數(shù)組,找到其中的眾數(shù)。眾數(shù)是指在數(shù)組中出現(xiàn)次數(shù)大于 ? n/...
    MaosongRan閱讀 983評(píng)論 0 0
  • 開(kāi)始容易堅(jiān)持難,至今已經(jīng)堅(jiān)持簡(jiǎn)書(shū)145天,回頭看自己簡(jiǎn)書(shū)內(nèi)容,實(shí)在沒(méi)什么可圈可點(diǎn)之處。當(dāng)初,也就是為了培養(yǎng)自己一個(gè)...
    好肚油肚_008閱讀 172評(píng)論 0 1

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