国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    7332

    瀏覽量

    94573
  • API
    API
    +關注

    關注

    2

    文章

    2338

    瀏覽量

    66661

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    復合機器人機械結構設計與創新:智能制造的前沿技術與發展趨勢

    :復合機器人機械結構設計的核心技術 1.1 多自由度設計與靈活性提升 多自由度(DOF)設計是復合機器人機械結構中最為關鍵的技術之一。通過增加機械臂或機器人的自由度,復合機器人能夠執行更復雜的操作,提供更高的精度和靈活性
    的頭像 發表于 02-05 15:13 ?37次閱讀
    復合機器人機械<b class='flag-5'>結構設計</b>與創新:智能制造的前沿技術與發展趨勢

    ePTFE防水透氣膜與塑料零件焊接的結構設計指南

    ePTFE(膨體聚四氟乙烯)防水透氣膜與塑料零件焊接時的結構設計問題。一般采用熱熔焊接和超聲波焊接兩種工藝,而超聲波焊接往往需要設計特殊的焊接結構,這是一個非常專業且關鍵的工藝環節,直接決定了產品
    的頭像 發表于 01-20 11:44 ?226次閱讀
    ePTFE防水透氣膜與塑料零件焊接的<b class='flag-5'>結構設計</b>指南

    知識分享:產品的結構構架與EMC

    知識分享:產品的結構構架與EMC結構是產品的重要組成部分,結構不能單獨成為EMC問題的來源,但卻是解決EMC問題的重要途徑。電磁場屏蔽、良好的接地系統以及耦合的避免都要借助于良好的結構設計
    的頭像 發表于 01-19 17:07 ?1227次閱讀
    知識分享:產品的<b class='flag-5'>結構</b>構架與EMC

    半導體封裝框架的外部結構設計

    封裝框架的外部結構設計,核心包含聯筋(Dambar)與假腳(False leads)兩大關鍵部分,以下將針對各設計要素及技術要求展開詳細說明。
    的頭像 發表于 12-26 15:03 ?485次閱讀
    半導體封裝框架的外部<b class='flag-5'>結構設計</b>

    堆和的區別

    一個由C/C 編譯的程序占用的內存分為以下幾個部分: 區(stack):由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的。 堆區(heap):一般由
    的頭像 發表于 11-27 18:13 ?1053次閱讀

    改進型乘法器結構設計

    位,乘數的符號擴展位為0,MUL和 MULH指令的兩個操作數的符號擴展位分別為被乘數和乘數的最高位。MUL指令選取Wallace樹形結構壓縮結果的低32位,其余乘法指令選取Wallace樹形結構壓縮結果
    發表于 10-22 07:51

    解析GaN-MOSFET的結構設計

    GaN-MOSFET 的結構設計中,p-GaN gate(p 型氮化鎵柵) 和Cascode(共源共柵) 是兩種主流的柵極控制方案,分別適用于不同的應用場景,核心差異體現在結構設計、性能特點和適用范圍上。
    的頭像 發表于 10-14 15:28 ?861次閱讀
    解析GaN-MOSFET的<b class='flag-5'>結構設計</b>

    自主創新賦能半導體封裝產業——江蘇拓能半導體科技有限公司與 “半導體封裝結構設計軟件” 的突破之路

    的性能、可靠性與成本,而封裝結構設計作為封裝技術落地的 “第一道關卡”,對設計軟件的依賴性極強。在此背景下,江蘇拓能半導體科技有限公司(以下簡稱 “江蘇拓能”)自主研發的 “半導體封裝結構設計軟件 V1.0”(簡稱:半
    的頭像 發表于 09-11 11:06 ?939次閱讀
    自主創新賦能半導體封裝產業——江蘇拓能半導體科技有限公司與 “半導體封裝<b class='flag-5'>結構設計</b>軟件” 的突破之路

    【HZ-T536開發板免費體驗】6、使用protoc-gen-gorm生成標準化的數據結構

    在設計espnow協議的時候,考慮到我需要在esp32,Linux設備,web上使用相同的數據結構,那就需要考慮一下,是否使用一個通用的跨平臺序列化數據結構。這時候我想起了protobuf,這個就是
    發表于 08-26 00:32

    冠坤臺系電容:憑獨特卷繞結構設計,成為車規空間內能量儲備的 “擴容專家”

    獨特的臺系電容技術,尤其是創新的卷繞結構設計,成功在車規空間內實現了能量儲備的"擴容",成為行業內的佼佼者。 冠坤電子的核心技術優勢在于其獨特的卷繞結構設計。傳統的電容器采用簡單的層疊或卷繞方式,容易受到空間限制,難以在
    的頭像 發表于 08-05 17:07 ?726次閱讀

    PCB層疊結構設計的先決條件

    )出發,深入探討PCB多層板的層疊結構設計的先決條件。 一、Core和PP的簡要介紹 Core是PCB多層板的核心組成部分,它的兩個表層都鋪有銅箔,可作為信號層、電源層、地層等導電層。Core的上、下表層之間填充的是固態材料,具有良好的機械強度和電氣性能。而PP則是一種半固態的樹脂
    的頭像 發表于 06-06 15:37 ?1217次閱讀
    PCB層疊<b class='flag-5'>結構設計</b>的先決條件

    微孔霧化設備結構設計要點 – 陶瓷片固定&amp;受力分析

    在微孔霧化驅動集成芯片的推廣實踐中,我們發現除了硬件和軟件的迭代升級,結構設計方面有一個值得顯著關注的點:微孔設備的霧化性能(頻率,霧化量和功耗)會受到陶瓷片表面壓力的直接影響。我們強烈建議,在初步
    的頭像 發表于 05-29 10:42 ?1205次閱讀
    微孔霧化設備<b class='flag-5'>結構設計</b>要點 – 陶瓷片固定&amp;受力分析

    OCAD應用:菲涅爾透鏡初始結構設計

    像系統,特別是照明系統更為常見。這類系統往往只需要一個單片透鏡,工藝簡單可以模壓成形。在對該類透鏡初始結構設計時利用 OCAD 程序也非常簡單。只要在數據表格中的“表面面型”欄內選擇“菲涅爾面”,接著
    發表于 05-19 08:49

    程序設計與數據結構

    《程序設計與數據結構》重點闡述了三大方向內容: 1. C語言學習中的痛點:針對當前工程師在C語言學習中的痛點,如指針函數與函數指針,如何靈活應用結構體等。從變量的三要素(變量的類型,變量的值和變量
    發表于 05-13 16:45

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

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