找出數(shù)組中出現(xiàn)次數(shù)最多的那個數(shù)

一、問題描述

找出數(shù)組中出現(xiàn)次數(shù)最多的那個數(shù)适贸,要求時間復雜度和空間復雜度為O(n)黎侈。

二、實現(xiàn)思路

使用HashMap闷游,每個Entry的key存放數(shù)組中的數(shù)字峻汉,value存放該數(shù)字出現(xiàn)的次數(shù),首先遍歷數(shù)組元素構造HashMap脐往,然后遍歷每個Entry休吠,找出最大value對應的key,即是出現(xiàn)次數(shù)最多的那個數(shù)业簿。

三瘤礁、代碼實現(xiàn)

package xzg.algorithm;

import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

/**
 * 找出數(shù)組中出現(xiàn)次數(shù)最多的那個數(shù)--主元素問題
 */
public class SearchMuch {

    public static void main(String[] args) {

        int[] arr = {4, 7, 1, 4, 9, 3, 2, 4, 15, 8, 6, 7, 3, 5, 10, 8};

        searchMuch(arr);
    }

    /**
     * 該算法是使用了 HashMap 的鏈表數(shù)組的結構<p/>
     * 思路:<p/>
     * 1.把數(shù)組中的每一個值,看做是HashMap中的 Key梅尤,第一次出現(xiàn)則把對應的Key的value設置為1(即出現(xiàn)一次)<p/>
     * 2.后續(xù)則判斷以數(shù)組值為key柜思,是否在HashMap中存在岩调,若存在則對應的value加1,<p/>
     * 3.重復步驟1和2,然后找到HashMap中value最大的鍵值對(此時:該value對應數(shù)組中數(shù)字出現(xiàn)大的重復次數(shù)赡盘,key則對應著值)<p/>
     * HashMap中的Key就是數(shù)組中的值号枕,value即為該數(shù)值出現(xiàn)的次數(shù)<p/>
     *
     * 時間復雜度為O(N),空間復雜度為O(N)
     * @param arr
     */
    public static void searchMuch(int[] arr) {
        HashMap<Integer, Integer> hashMap = new HashMap<>();
        int length = arr.length;
        for (int i = 0; i < length - 1; i++) {
            //已數(shù)組中的值陨享,作為HashMap中的Key
            int value = arr[i];
            //判斷相關的key是否已存在
            if (hashMap.containsKey(value)) {
                //存在葱淳,則說明之前有出現(xiàn)過,則重復次數(shù)再次加1(對應的value加1)
                int count = hashMap.get(value);
                hashMap.put(value, count + 1);
            } else {
                //不存在抛姑,說明是第一次出現(xiàn)赞厕,則直接設置對應的value為1(value即表示該數(shù)值出現(xiàn)的次數(shù))
                hashMap.put(value, 1);
            }
        }
        //已value創(chuàng)建集合
        Collection<Integer> collection = hashMap.values();
        //找到最大的值(即最大重復次數(shù))
        int maxCount = Collections.max(collection);
        int maxNumber = 0;
        for (Map.Entry<Integer, Integer> entry : hashMap.entrySet()) {
            //循環(huán)遍歷,在HashMap中找到vmaxCount(最大重復次數(shù))所對應的key(最大重復次數(shù)所對應的數(shù)值)
            if (entry.getValue() == maxCount) {
                maxNumber = entry.getKey();
            }
        }
        System.out.println("出現(xiàn)次數(shù)最多的數(shù)字是:" + maxNumber);
        System.out.println("該數(shù)字一共出現(xiàn)了:" + maxCount + " 次");

    }

}

輸出結果如下:

出現(xiàn)次數(shù)最多的數(shù)字是:4
該數(shù)字一共出現(xiàn)了:3 次

Process finished with exit code 0

四定硝、算法分析

該算法時間復雜度為O(N)皿桑,空間復雜度為O(N)

五、總結

該問題需要了解HashMap相關的原理喷斋,可同時用來考察Java基礎和算法知識唁毒。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市星爪,隨后出現(xiàn)的幾起案子浆西,更是在濱河造成了極大的恐慌,老刑警劉巖顽腾,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件近零,死亡現(xiàn)場離奇詭異,居然都是意外死亡抄肖,警方通過查閱死者的電腦和手機久信,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來漓摩,“玉大人裙士,你說我怎么就攤上這事」鼙校” “怎么了腿椎?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長夭咬。 經(jīng)常有香客問我啃炸,道長,這世上最難降的妖魔是什么卓舵? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任南用,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘裹虫。我一直安慰自己肿嘲,他們只是感情好,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布恒界。 她就那樣靜靜地躺著睦刃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪十酣。 梳的紋絲不亂的頭發(fā)上涩拙,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音耸采,去河邊找鬼兴泥。 笑死,一個胖子當著我的面吹牛虾宇,可吹牛的內容都是我干的搓彻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼嘱朽,長吁一口氣:“原來是場噩夢啊……” “哼旭贬!你這毒婦竟也來了?” 一聲冷哼從身側響起搪泳,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤稀轨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后岸军,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奋刽,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年艰赞,在試婚紗的時候發(fā)現(xiàn)自己被綠了佣谐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡方妖,死狀恐怖狭魂,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情党觅,我是刑警寧澤雌澄,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站仔役,受9級特大地震影響掷伙,放射性物質發(fā)生泄漏是己。R本人自食惡果不足惜又兵,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沛厨,春花似錦宙地、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至电谣,卻和暖如春秽梅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背剿牺。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工企垦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晒来。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓钞诡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親湃崩。 傳聞我的和親對象是個殘疾皇子荧降,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內容

  • 實際上,HashSet 和 HashMap 之間有很多相似之處攒读,對于 HashSet 而言朵诫,系統(tǒng)采用 Hash 算...
    曹振華閱讀 2,515評論 1 37
  • 一、HashMap概述 HashMap基于哈希表的Map接口的實現(xiàn)整陌。此實現(xiàn)提供所有可選的映射操作拗窃,并允許使用nul...
    小陳阿飛閱讀 639評論 0 2
  • 摘要 HashMap是Java程序員使用頻率最高的用于映射(鍵值對)處理的數(shù)據(jù)類型。隨著JDK(Java Deve...
    周二倩你一生閱讀 1,253評論 0 5
  • 還有不到一個小時就是教師節(jié)……… 一個我過了13年的節(jié)日……… 此時此刻我給生命中的恩師們泌辫,發(fā)去真心的祝福随夸! 恩師...
    完顏古方張振華閱讀 274評論 0 0
  • 在生活中有這樣一種人殿遂,你會發(fā)現(xiàn)他每天都很努力诈铛,你問他,你為什么要這樣忙碌奔波墨礁?輕松一些不好嗎幢竹? 可他會告訴你,如果...
    從小就愛寫作文閱讀 479評論 0 0