欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

代碼隨想錄算法訓(xùn)練營第十三天-創(chuàng)新互聯(lián)

LeetCode 239. 滑動(dòng)窗口大值

10年積累的網(wǎng)站建設(shè)、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先建設(shè)網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有建德免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

題目描述:給你一個(gè)整數(shù)數(shù)組 nums,有一個(gè)大小為?k?的滑動(dòng)窗口從數(shù)組的最左側(cè)移動(dòng)到數(shù)組的最右側(cè)。你只可以看到在滑動(dòng)窗口內(nèi)的 k?個(gè)數(shù)字?;瑒?dòng)窗口每次只向右移動(dòng)一位。返回 滑動(dòng)窗口中的大值 。


視頻講解https://www.bilibili.com/video/BV1XS4y1p7qj/?vd_source=f98f2942b3c4cafea8907a325fc56a48文章講解https://programmercarl.com/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.html

  • 思路:不必維護(hù)窗口里的所有元素,只需要維護(hù)有可能成為窗口里大值的元素就可以了
    • 單調(diào)隊(duì)列:用 deque 維護(hù)一個(gè)隊(duì)首→隊(duì)尾,單調(diào)遞減的隊(duì)列 que
      • void pop(int val):如果 val 為大值,彈出隊(duì)首元素,即 que.pop_front()
      • void push(int val):
        • que 中的元素都比 val 早進(jìn)入滑動(dòng)窗口,也早離開滑動(dòng)窗口,故而只需維護(hù)大于 val 的值,比 val 小的值是沒有機(jī)會(huì)成為滑動(dòng)窗口大值的
        • while (隊(duì)尾元素
        • 將 val 插入到隊(duì)尾
      • int getMax():返回隊(duì)首元素
    • i< k,只 push(nums[i])
    • 添加 [0, k - 1] 大值到 result
    • i 從 k 向后遍歷,先 pop(nums[i - k]),再 push(nums[i]),最后添加滑動(dòng)窗口 [ i - k + 1, i] 的大值(直接調(diào)用 getMax)到 result
  • 代碼:
class Solution {
private:
    // 單調(diào)隊(duì)列(從大到小)
    class MyQueue {
    public:
        // 用deque來實(shí)現(xiàn)
        dequeque;
        // 每次彈出的時(shí)候,比較當(dāng)前要彈出的數(shù)值是否等于隊(duì)列出口元素的數(shù)值,如果相等則彈出。
        // 同時(shí)pop之前判斷隊(duì)列當(dāng)前是否為空。
        void pop(int val) {
            if (!que.empty() && val == que.front()) {
                que.pop_front();
            }
        }
        // 如果push的數(shù)值大于入口元素的數(shù)值,那么就將隊(duì)列后端的數(shù)值彈出,直到push的數(shù)值小于等于隊(duì)列入口元素的數(shù)值為止。
        // 這樣就保持了隊(duì)列里的數(shù)值是單調(diào)從大到小的了。
        void push(int val) {
            while (!que.empty() && que.back()< val ) {
                que.pop_back();
            }
            que.push_back(val);
        }
        // 查詢當(dāng)前隊(duì)列里的大值 直接返回隊(duì)列前端也就是front就可以了。
        int getMax() {
            return que.front();
        }
    };
public:
    vectormaxSlidingWindow(vector& nums, int k) {
        MyQueue que;
        // 滑動(dòng)窗口大值序列
        vectorresult;
        // 先將前k的元素放進(jìn)隊(duì)列
        for (int i = 0; i< k; ++i) {
            que.push(nums[i]);
        }
        result.push_back(que.getMax());
        // 移動(dòng)滑動(dòng)窗口
        for (int i = k; i< nums.size(); ++i) {
            que.pop(nums[i - k]);
            que.push(nums[i]);
            result.push_back(que.getMax());
        }
        return result;
    }
};

LeetCode 347.前 K 個(gè)高頻元素

題目描述:給定一個(gè)非空的整數(shù)數(shù)組 nums,返回其中出現(xiàn)頻率前 k 高的元素。

視頻講解https://www.bilibili.com/video/BV1Xg41167Lz文章講解https://programmercarl.com/0347.%E5%89%8DK%E4%B8%AA%E9%AB%98%E9%A2%91%E5%85%83%E7%B4%A0.html

  • 思路:
    • 統(tǒng)計(jì) {元素值, 出現(xiàn)次數(shù)}:不需要按key值排序,unordered_map即可
    • 排序,維護(hù)出現(xiàn)次數(shù)前k大的(用小頂堆,頻率低的優(yōu)先級(jí)高)
    • 需要自定義比較規(guī)則,可以參考下這篇文章:c++優(yōu)先隊(duì)列(priority_queue)用法詳解
    • 注意:優(yōu)先隊(duì)列中存儲(chǔ)的是pair,而最后結(jié)果只需要key
  • 代碼:
// 時(shí)間復(fù)雜度:O(nlogk)
// 空間復(fù)雜度:O(n)
class Solution {
public:
    // 小頂堆
    class mycomparison {
    public:
        bool operator()(const pair& lhs, const pair& rhs) {
            // 頻率低的優(yōu)先級(jí)高
            return lhs.second >rhs.second;
        }
    };
    vectortopKFrequent(vector& nums, int k) {
        // 要統(tǒng)計(jì)元素出現(xiàn)頻率
        unordered_mapmap; // mapfor (int i = 0; i< nums.size(); i++) {
            map[nums[i]]++;
        }

        // 對(duì)頻率排序
        // 定義一個(gè)小頂堆,大小為k
        priority_queue, vector>, mycomparison>pri_que;

        // 用固定大小為k的小頂堆,掃面所有頻率的數(shù)值
        for (unordered_map::iterator it = map.begin(); it != map.end(); it++) {
            pri_que.push(*it);
            if (pri_que.size() >k) { // 如果堆的大小大于了K,則隊(duì)列彈出,保證堆的大小一直為k
                pri_que.pop();
            }
        }

        // 找出前K個(gè)高頻元素,因?yàn)樾№敹严葟棾龅氖亲钚〉模缘剐騺磔敵龅綌?shù)組
        vectorresult(k);
        for (int i = k - 1; i >= 0; i--) {
            result[i] = pri_que.top().first;
            pri_que.pop();
        }
        return result;

    }
};

總結(jié)

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

分享題目:代碼隨想錄算法訓(xùn)練營第十三天-創(chuàng)新互聯(lián)
新聞來源:http://chinadenli.net/article48/dgcchp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、全網(wǎng)營銷推廣搜索引擎優(yōu)化、網(wǎng)站營銷、品牌網(wǎng)站設(shè)計(jì)、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)