在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何解決數據結構設計最大頻率棧問題?

算法與數據結構 ? 來源:labuladong ? 作者:labuladong ? 2021-03-02 11:02 ? 次閱讀

讀完本文,可以去力扣解決如下題目:

895.最大頻率棧(Hard)

我個人很喜歡設計特殊數據結構的問題,畢竟在工作中會經常用到基本數據結構,而設計類的問題就非常考驗對基本數據結構的理解和運用。

力扣第 895 題要求我們實現一個特殊的數據結構「最大頻率棧」,比較有意思,讓我們實現下面這兩個 API

class FreqStack {

// 在棧中加入一個元素 val

public void push(int val) {}

// 從棧中刪除并返回出現頻率最高的元素

// 如果頻率最高的元素不止一個,

// 則返回最近添加的那個元素

public int pop() {}

}

比如下面這個例子:

FreqStack stk = new FreqStack();

// 向最大頻率棧中添加元素

stk.push(2); stk.push(7); stk.push(2);

stk.push(7); stk.push(2); stk.push(4);

// 棧中元素:[2,7,2,7,2,4]

stk.pop() // 返回 2

// 因為 2 出現了三次

// 棧中元素:[2,7,2,7,4]

stk.pop() // 返回 7

// 2 和 7 都出現了兩次,但 7 是最近添加的

// 棧中元素:[2,7,2,4]

stk.pop() // 返回 2

// 棧中元素:[2,7,4]

stk.pop() // 返回 4

// 棧中元素:[2,7]

這種設計數據結構的問題,主要是要搞清楚問題的難點在哪里,然后結合各種基本數據結構的特性,高效實現題目要求的 API。

那么,我們仔細思考一下 push 和 pop 方法,難點如下:

1、每次 pop 時,必須要知道頻率最高的元素是什么。

2、如果頻率最高的元素有多個,還得知道哪個是最近 push 進來的元素是哪個。

為了實現上述難點,我們要做到以下幾點:

1、肯定要有一個變量 maxFreq 記錄當前棧中最高的頻率是多少。

2、我們得知道一個頻率 freq 對應的元素有哪些,且這些元素要有時間順序。

3、隨著 pop 的調用,每個 val 對應的頻率會變化,所以還得維持一個映射記錄每個 val 對應的 freq。

綜上,我們可以先實現 FreqStack 所需的數據結構:

class FreqStack {

// 記錄 FreqStack 中元素的最大頻率

int maxFreq = 0;

// 記錄 FreqStack 中每個 val 對應的出現頻率,后文就稱為 VF 表

HashMap《Integer, Integer》 valToFreq = new HashMap《》();

// 記錄頻率 freq 對應的 val 列表,后文就稱為 FV 表

HashMap《Integer, Stack《Integer》》 freqToVals = new HashMap《》();

}

其實這有點類似前文 手把手實現 LFU 算法,注意 freqToVals 中 val 列表用一個棧實現,如果一個 freq 對應的元素有多個,根據棧的特點,可以首先取出最近添加的元素。

要記住在 push 和 pop 方法中同時修改 maxFreq、VF 表、FV 表,否則容易出現 bug。

現在,我們可以來實現 push 方法了:

public void push(int val) {

// 修改 VF 表:val 對應的 freq 加一

int freq = valToFreq.getOrDefault(val, 0) + 1;

valToFreq.put(val, freq);

// 修改 FV 表:在 freq 對應的列表加上 val

freqToVals.putIfAbsent(freq, new Stack《》());

freqToVals.get(freq).push(val);

// 更新 maxFreq

maxFreq = Math.max(maxFreq, freq);

}

pop 方法的實現也非常簡單:

public int pop() {

// 修改 FV 表:pop 出一個 maxFreq 對應的元素 v

Stack《Integer》 vals = freqToVals.get(maxFreq);

int v = vals.pop();

// 修改 VF 表:v 對應的 freq 減一

int freq = valToFreq.get(v) - 1;

valToFreq.put(v, freq);

// 更新 maxFreq

if (vals.isEmpty()) {

// 如果 maxFreq 對應的元素空了

maxFreq--;

}

return v;

}

這樣,兩個 API 都實現了,算法執行過程如下:

嗯,這道題就解決了,Hard 難度的題目也不過如此嘛~

原文標題:數據結構基本功:設計最大頻率棧

文章出處:【微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7233

    瀏覽量

    90833
  • API
    API
    +關注

    關注

    2

    文章

    1556

    瀏覽量

    63354

原文標題:數據結構基本功:設計最大頻率棧

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    可靠性測試結構設計概述

    深入理解設計規則,設計者可在可靠性測試結構優化中兼顧性能、成本與質量,推動半導體技術的持續創新。
    的頭像 發表于 04-11 14:59 ?279次閱讀
    可靠性測試<b class='flag-5'>結構設計</b>概述

    電子設備結構設計中的電源模塊EMC細節深度剖析

    、電源屏蔽、EMI 耦合、開關電源模塊外圍電路的EMC與防護設計等方面的細節,有助于電子設備結構設計效果優化。 ? 1 開關電源 開關電源引起電磁干擾問題的原因是很復雜的。針對開關電源的EMC 問題,在設計時應采用以下主要措施: 1.1 軟開關
    的頭像 發表于 02-17 10:20 ?2617次閱讀

    BP神經網絡的網絡結構設計原則

    BP(back propagation)神經網絡是一種按照誤差逆向傳播算法訓練的多層前饋神經網絡,其網絡結構設計原則主要基于以下幾個方面: 一、層次結構 輸入層 :接收外部輸入信號,不進行任何計算
    的頭像 發表于 02-12 16:41 ?463次閱讀

    采用 LLC 拓撲結構設計隔離式柵極驅動器電源,低成本 LLC 轉換器的設計指南

    本文檔 “Designing an Isolated Gate Driver Power Supply with LLC Topology” 主要介紹了采用 LLC 拓撲結構設計隔離式柵極驅動器電源
    的頭像 發表于 01-08 14:17 ?1443次閱讀
    采用 LLC 拓撲<b class='flag-5'>結構設計</b>隔離式柵極驅動器電源,低成本 LLC 轉換器的設計指南

    鑒相器和電荷泵的結構設計及優化

    鑒相器+電荷泵(PFD+CP)是鎖相環內部的重要結構,在通信系統、頻率合成以及時鐘信號生成中有著廣泛的應用。鑒相器用于檢測兩個輸入信號的相位差,電荷泵把鑒相器輸出的相位差轉換成電荷輸送給濾波器,用于給后續的震蕩器提供控制電壓。本文將對鑒相器和電荷泵
    的頭像 發表于 01-02 09:39 ?2563次閱讀
    鑒相器和電荷泵的<b class='flag-5'>結構設計</b>及優化

    DDC264配置寄存器數據寫入和320 DCLK時鐘脈沖后的回讀數據結構是什么?

    配置寄存器數據寫入和320 DCLK時鐘脈沖后的回讀數據結構是什么? 根據注和表9,16位配置寄存器數據,4位修訂ID, 300位校驗模式,怎么可能有1024 TOTAL READBACK BITS, format = 0
    發表于 11-19 07:58

    視覺軟件HALCON的數據結構

    在研究機器視覺算法之前,我們需要先了解機器視覺應用中涉及的基本數據結構。Halcon數據結構主要有圖像參數和控制參數兩類參數。圖像參數包括:image、region、XLD,控制參數包括:string、integer、real、handle、tuple數組等。
    的頭像 發表于 11-14 10:20 ?997次閱讀
    視覺軟件HALCON的<b class='flag-5'>數據結構</b>

    HDI的疊層結構設計

    在現代電子制造領域,高密度互連(HDI)技術已成為推動電子產品向更小型化、更高性能發展的關鍵因素。HDI技術的核心在于其獨特的疊構設計,這不僅極大地提升了電路板的空間利用率,還顯著增強了電氣性能和信號完整性。
    的頭像 發表于 10-28 14:18 ?1028次閱讀
    HDI的疊層<b class='flag-5'>結構設計</b>

    永磁發電機的主要結構設計是什么?

    永磁發電機是一種利用永磁體產生磁場的發電機,它具有結構簡單、體積小、重量輕、效率高、維護方便等優點。永磁發電機的主要結構設計包括以下幾個方面: 定子部分 定子是發電機的核心部件之一,它主要由定子鐵芯
    的頭像 發表于 10-25 10:40 ?691次閱讀

    架構師日記-從數據庫發展歷程到數據結構設計探析

    數據庫發展史 起初,數據的管理方式是文件系統,數據存儲在文件中,數據管理和維護都由程序員完成。后來發展出樹形結構和網狀
    的頭像 發表于 09-25 11:20 ?1031次閱讀
    架構師日記-從<b class='flag-5'>數據</b>庫發展歷程到<b class='flag-5'>數據結構設計</b>探析

    嵌入式常用數據結構有哪些

    在嵌入式編程中,數據結構的選擇和使用對于程序的性能、內存管理以及開發效率都具有重要影響。嵌入式系統由于資源受限(如處理器速度、內存大小等),因此對數據結構的選擇和使用尤為關鍵。以下是嵌入式編程中常用的幾種數據結構,結合具體特點和
    的頭像 發表于 09-02 15:25 ?868次閱讀

    EMC(電磁兼容性)結構設計基礎

    介紹了電磁兼容的基本定義,要求,結構設計的準則和方法。
    發表于 08-08 14:23 ?13次下載

    5針M16接口結構設計

    德索工程師說道5針M16接口的結構設計是一個綜合性的過程,它融合了電氣、機械、材料科學等多個領域的知識,旨在提供高效、穩定且可靠的電氣連接。以下是對5針M16接口結構設計的詳細解析:   5針
    的頭像 發表于 08-03 09:38 ?705次閱讀
    5針M16接口<b class='flag-5'>結構設計</b>

    使用CYW20829的BLE進行最大數據發送應用,BLE丟失數據何解決?

    我目前正在使用 CYW20829 的 BLE 進行最大數據發送應用,我使用的是 FREERTOS(例程 Bluetooth_LE_GATT_Throughput_Server 是我的參考),藍牙被
    發表于 07-23 07:56

    3針M5插座結構設計

       德索工程師說道在電子設備和電氣系統中,插座作為連接電源、信號線等的重要接口,其結構設計對于設備的整體性能、穩定性和安全性具有至關重要的作用。3針M5插座作為其中一種常見的插座類型,其設計不僅
    的頭像 發表于 05-11 17:49 ?742次閱讀
    3針M5插座<b class='flag-5'>結構設計</b>
    主站蜘蛛池模板: 国产操女人 | 午夜两性色视频免费网站 | 国产精品推荐天天看天天爽 | 亚州免费一级毛片 | 奇米777me| www.啪啪.com | 欧美特黄一级视频 | 一区二区三区四区五区 | 天天做天天爱天天一爽一毛片 | xxxx 欧美| 欧美亚洲专区 | 天天射干 | 国产免费亚洲 | 婷婷丁香在线观看 | 国产精品美女视频 | 最近最新免费视频 | 黄视频网站在线观看 | 日韩精品三级 | you ji z z日本人在线观看 | 天天操天天操天天操天天操 | 欧美一区二区三区在线观看 | 特级一级全黄毛片免费 | 成人欧美一区二区三区黑人免费 | 奇米7777影视 | 成人精品一级毛片 | 巨乳色最新网址 | 天天插综合 | 精品伊人久久大香线蕉网站 | 欧美黑粗特黄午夜大片 | 久久久久青草 | 福利视频免费看 | 日韩特黄特色大片免费视频 | www.99热.com| 午夜久久免影院欧洲 | 亚洲 欧洲 日产 韩国在线 | 午夜精品福利视频 | 天堂资源在线www中文 | 四虎影院新网址 | 亚洲成人免费在线观看 | 色婷婷5月精品久久久久 | 日本三级成人午夜视频网 |