LeetCode求眾數(shù)(尋找多數(shù)元素/主元素問(wèn)題)

1、題目描述

給定一個(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

說(shuō)明:
此題也叫做尋找多數(shù)元素/主元素問(wèn)題。解決這個(gè)問(wèn)題有好多種方法,蠻力方法就是把序列中的每個(gè)元素和其他每個(gè)元素比較,并且對(duì)每個(gè)元素計(jì)數(shù),如果某個(gè)元素的計(jì)數(shù)大于n/2,就可以判斷它是多數(shù)元素,否則無(wú)多數(shù)元素。但是這樣的比較次數(shù)是n(n-1)/2=O(n^2),復(fù)雜度高。比較有效的算法是先對(duì)這些元素排序,并且計(jì)算每個(gè)元素在序列中出現(xiàn)的次數(shù),最壞情況下是O(nlogn)。因?yàn)榕判蜻@一步需要O(nlogn)次比較,也相對(duì)比較高,是不符合時(shí)間上的要求的,因此就有了一種相比之下更聰明的方法。

2、解法:

在原序列中去除兩個(gè)不同的元素以后,原序列中的多數(shù)元素在新的序列中還是多數(shù)元素

說(shuō)明

采用count來(lái)標(biāo)記主元素的個(gè)數(shù),假設(shè)第一個(gè)是主元素,從第二個(gè)開(kāi)始比對(duì),如果相等,則count++,否則,則是count--,當(dāng)count減到0的時(shí)候,主元素默認(rèn)為下一個(gè)。count加減的過(guò)程中,就是在模擬去掉兩個(gè)不同元素的過(guò)程!
代碼如下:

       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;
    }

經(jīng)測(cè)試,可行!

附上leetcode此題鏈接:

https://leetcode-cn.com/problems/majority-element/

?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 本文內(nèi)容為練習(xí)LeetCode題目時(shí)的解題思路和不同算法的記錄,實(shí)現(xiàn)語(yǔ)言為C++,代碼保存在Github,均已在L...
    SK木眠閱讀 1,126評(píng)論 0 0
  • 本文是我自己在秋招復(fù)習(xí)時(shí)的讀書筆記,整理的知識(shí)點(diǎn),也是為了防止忘記,尊重勞動(dòng)成果,轉(zhuǎn)載注明出處哦!如果你也喜歡,那...
    波波波先森閱讀 2,945評(píng)論 0 10
  • 1 初級(jí)排序算法 排序算法關(guān)注的主要是重新排列數(shù)組元素,其中每個(gè)元素都有一個(gè)主鍵。排序算法是將所有元素主鍵按某種方...
    深度沉迷學(xué)習(xí)閱讀 1,610評(píng)論 0 1
  • 從小到大,很多時(shí)候我們都被教育著看向第一名,總是被拿著和第一名做比較,思維上也是告訴我們要去爭(zhēng)取第一,仿佛只有第一...
    Bradywbs閱讀 299評(píng)論 0 1
  • 女兒進(jìn)入小學(xué)已經(jīng)一個(gè)多月了,一回顧發(fā)現(xiàn)進(jìn)步很大 第一個(gè)月還需要我來(lái)檢查作業(yè),削鉛筆,叮囑詢問(wèn)作業(yè)進(jìn)度,督促看書,勸...
    吹西閱讀 271評(píng)論 2 2

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