国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法通關(guān)村第十六關(guān):黃金挑戰(zhàn):滑動(dòng)窗口與堆結(jié)合

這篇具有很好參考價(jià)值的文章主要介紹了算法通關(guān)村第十六關(guān):黃金挑戰(zhàn):滑動(dòng)窗口與堆結(jié)合。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

黃金挑戰(zhàn):滑動(dòng)窗口與堆結(jié)合

堆的大小一般是有限的,能直接返回當(dāng)前位置下的最大值或者最小值
該特征與滑動(dòng)窗口結(jié)合,可以解決一些特定場(chǎng)景的問(wèn)題

1. 滑動(dòng)窗口與堆問(wèn)題的結(jié)合

LeetCode239
https://leetcode.cn/problems/sliding-window-maximum/

思路分析

對(duì)于最大值,K個(gè)最大這種場(chǎng)景,優(yōu)先隊(duì)列(堆)是首先該考慮的思路。
大根堆可以幫我們實(shí)時(shí)維護(hù)一系列元素的最大值

具體執(zhí)行:

  • 先將數(shù)組的前K個(gè)元素放入大根堆中,此時(shí)最大值為堆頂元素
  • 每當(dāng)窗口右移時(shí),將新元素放入大根堆中,此時(shí)最大值可能不在滑動(dòng)窗口中
    最大值為滑動(dòng)窗口的前一個(gè)元素,此時(shí)需要將堆頂元素移除,直到堆頂元素在滑動(dòng)窗口中
    最大值為滑動(dòng)窗口中的元素,此時(shí)最大值就是堆頂元素
  • 為了方便判斷堆頂元素與滑動(dòng)窗口的位置關(guān)系,我們可以在有限隊(duì)列中存儲(chǔ)二元組(num, index),表示元素 num 在數(shù)組中的下標(biāo)為 index

代碼實(shí)現(xiàn)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-707185.html

import heapq

class Solution:
    def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
        n = len(nums)
        ans = []
        # 注意 Python 默認(rèn)的優(yōu)先隊(duì)列是小根堆
        # pyhton 中(int,int)可正常比較大小 (1, 0) < (2, 0), (1, 0) < (1, 1)
        heap = [(-nums[i], i) for i in range(k)]
        heapq.heapify(heap)

        ans.append(-heap[0][0])
        for i in range(n-k):
            heapq.heappush(heap, (-nums[i+k], i+k))
            # 移除堆頂元素,直到堆頂元素在滑動(dòng)窗口中
            while heap[0][1] <= i:
                heapq.heappop(heap)
            ans.append(-heap[0][0])

        return ans

到了這里,關(guān)于算法通關(guān)村第十六關(guān):黃金挑戰(zhàn):滑動(dòng)窗口與堆結(jié)合的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 算法通關(guān)村 —— 滑動(dòng)窗口經(jīng)典問(wèn)題

    算法通關(guān)村 —— 滑動(dòng)窗口經(jīng)典問(wèn)題

    目錄 滑動(dòng)窗口經(jīng)典問(wèn)題 1. 最長(zhǎng)子串專題 1.1 無(wú)重復(fù)字符的最長(zhǎng)子串 1.2 至多包含兩個(gè)不同字符的最長(zhǎng)子串 1.3 至多包含K個(gè)不同字符的最長(zhǎng)子串 2 長(zhǎng)度最小的子數(shù)組 3 盛水最多的容器 4 尋找子串異位詞 4.1 字符串的排列 4.2 找到字符串中所有字母異位 前面我們已經(jīng)了解了滑動(dòng)窗

    2024年02月06日
    瀏覽(24)
  • [Go版]算法通關(guān)村第十五關(guān)黃金——繼續(xù)研究超大規(guī)模數(shù)據(jù)場(chǎng)景的問(wèn)題

    [Go版]算法通關(guān)村第十五關(guān)黃金——繼續(xù)研究超大規(guī)模數(shù)據(jù)場(chǎng)景的問(wèn)題

    在 海量數(shù)據(jù) 中,此時(shí)普通的數(shù)組、鏈表、Hash、樹(shù)等等結(jié)構(gòu)有無(wú)效了 ,因?yàn)閮?nèi)存空間放不下了。而常規(guī)的遞歸、排序,回溯、貪心和動(dòng)態(tài)規(guī)劃等思想也無(wú)效了,因?yàn)閳?zhí)行都會(huì)超時(shí),必須另外想辦法。這類問(wèn)題該如何下手呢?這里介紹三種非常典型的思路: 使用位存儲(chǔ) ,使用

    2024年02月10日
    瀏覽(17)
  • 算法通關(guān)村 —— 滑動(dòng)窗口與堆結(jié)合

    給你一個(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)窗口中的最大值 。 這種方法在基礎(chǔ)算法的堆部分出現(xiàn)過(guò)。對(duì)于 最大值、K個(gè)最大 這種場(chǎng)景 優(yōu)先隊(duì)列

    2024年02月06日
    瀏覽(31)
  • [Go版]算法通關(guān)村第十三關(guān)黃金——數(shù)字?jǐn)?shù)學(xué)問(wèn)題之?dāng)?shù)論問(wèn)題(最大公約數(shù)、素?cái)?shù)、埃氏篩、丑數(shù))

    [Go版]算法通關(guān)村第十三關(guān)黃金——數(shù)字?jǐn)?shù)學(xué)問(wèn)題之?dāng)?shù)論問(wèn)題(最大公約數(shù)、素?cái)?shù)、埃氏篩、丑數(shù))

    題目鏈接:LeetCode-1979. 找出數(shù)組的最大公約數(shù) 輾轉(zhuǎn)相除法其核心部分為:若r 是a ÷ b的余數(shù),則 gcd(a, b)=gcd(b, r) 題目鏈接:LeetCode-204. 計(jì)數(shù)質(zhì)數(shù) 如果 x 是質(zhì)數(shù),那么大于 x 的 x 的倍數(shù) 2x,3x,… 一定不是質(zhì)數(shù)。 時(shí)間復(fù)雜度分析: 外層循環(huán)的迭代次數(shù)是 n-2,即 O ( n ) O(n) O ( n ) 次

    2024年02月11日
    瀏覽(24)
  • 算法通關(guān)村第十七關(guān):青銅挑戰(zhàn)-貪心其實(shí)很簡(jiǎn)單

    算法通關(guān)村第十七關(guān):青銅挑戰(zhàn)-貪心其實(shí)很簡(jiǎn)單

    1. 難以解釋的貪心算法 貪心學(xué)習(xí)法則:直接做題,不考慮貪不貪心 貪心(貪婪)算法 是指在問(wèn)題盡心求解時(shí),在每一步選擇中都采取最好或者最優(yōu)(最有利)的選擇,從而希望能夠?qū)е陆Y(jié)果最好或者最優(yōu)的算法 貪心算法所得到的結(jié)果不一定是最優(yōu)的結(jié)果,但是都是相對(duì)近似最

    2024年02月09日
    瀏覽(28)
  • 算法通關(guān)村第十八關(guān):青銅挑戰(zhàn)-回溯是怎么回事

    算法通關(guān)村第十八關(guān):青銅挑戰(zhàn)-回溯是怎么回事

    回溯,最重要的算法之一 主要解決一些暴力枚舉也搞不定的問(wèn)題,例如組合、分割、子集、排列、棋盤等 從性能角度來(lái)看回溯算法的效率并不高,但對(duì)于這些暴力都搞不定的算法能出結(jié)果就很好了,效率低點(diǎn)沒(méi)關(guān)系 回溯可視為遞歸的拓展,很多思想和解法都與遞歸密切相關(guān)

    2024年02月09日
    瀏覽(22)
  • 算法通關(guān)村第六關(guān)——如何使用中序和后序來(lái)恢復(fù)一顆二叉樹(shù)

    算法通關(guān)村第六關(guān)——如何使用中序和后序來(lái)恢復(fù)一顆二叉樹(shù)

    樹(shù)( Tree ) :表現(xiàn)得是一種 層次關(guān)系 ,為 n ( n ≥ 0 ) n(n≥0) n ( n ≥ 0 ) 個(gè)節(jié)點(diǎn)構(gòu)成的有限集合,當(dāng) n=0 時(shí),稱為 空樹(shù) ,對(duì)于任一顆非空樹(shù)( n0 ),它具備以下性質(zhì): ? 樹(shù)中有一個(gè)根(root)節(jié)點(diǎn),用 r 表示 ? 其余節(jié)點(diǎn)可分為 m(m0) 個(gè) 互不相交 的有限集 T 1 , T 2 , . .

    2024年02月13日
    瀏覽(17)
  • 算法通關(guān)村第11關(guān)【黃金】| 用4KB內(nèi)存尋找重復(fù)元素

    題目要求:給定一個(gè)數(shù)組,包含從1到N的整數(shù),N最大為32000,數(shù)組可能還有重復(fù)值,且N的取值不定,若只有4KB的內(nèi)存可用,該如何打印數(shù)組中所有重復(fù)元素。 思路: 直接用大小為32000的int數(shù)組來(lái)標(biāo)記對(duì)應(yīng)下標(biāo)下的值出現(xiàn)次數(shù),但是空間大小是32000*4B超過(guò)了4KB 這里采用一種壓縮

    2024年02月09日
    瀏覽(28)
  • 算法通關(guān)村|青銅挑戰(zhàn)----鏈表

    前言:數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ):創(chuàng)建+增刪改查 學(xué)習(xí)目標(biāo):?jiǎn)捂湵淼膭?chuàng)建+增刪改查,雙鏈表的創(chuàng)建+增刪改查 數(shù)據(jù)域+指針域 數(shù)據(jù)域:當(dāng)前節(jié)點(diǎn)的元素值 指針域:當(dāng)前節(jié)點(diǎn)保存的下一個(gè)節(jié)點(diǎn)的元素的地址,其中最后一個(gè)元素的指針域指向null 標(biāo)準(zhǔn)的面向?qū)ο蟮墓?jié)點(diǎn)的定義: LeetCode中節(jié)

    2024年02月15日
    瀏覽(18)
  • 《算法通關(guān)村第一關(guān)——鏈表青銅挑戰(zhàn)筆記》

    《算法通關(guān)村第一關(guān)——鏈表青銅挑戰(zhàn)筆記》

    鏈表中每個(gè)結(jié)點(diǎn)內(nèi)部的“生態(tài)環(huán)境”。 數(shù)據(jù)域存儲(chǔ)元素的值,指針域存放指針。 示例: c語(yǔ)言構(gòu)造鏈表 可分為三步 1.創(chuàng)建頭指針。 2.創(chuàng)建頭結(jié)點(diǎn),使頭指針指向頭結(jié)點(diǎn)。 3.循環(huán)創(chuàng)建結(jié)點(diǎn),并使前一個(gè)結(jié)點(diǎn)指向當(dāng)前結(jié)點(diǎn)。 1.)創(chuàng)建結(jié)點(diǎn)。 2.)使前一個(gè)結(jié)點(diǎn)指向當(dāng)前結(jié)點(diǎn)。 3.)

    2024年02月15日
    瀏覽(27)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包