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

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

這篇具有很好參考價(jià)值的文章主要介紹了239. 滑動(dòng)窗口最大值。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

力扣題目鏈接

?

(opens new window)

給定一個(gè)數(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)窗口中的最大值。

進(jìn)階:

你能在線性時(shí)間復(fù)雜度內(nèi)解決此題嗎?

提示:

  • 1 <= nums.length <= 10^5
  • -10^4?<= nums[i]?<= 10^4
  • 1 <= k?<= nums.length

代碼文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-609008.html

//解法一
//自定義數(shù)組
class MyQueue {
    Deque<Integer> deque = new LinkedList<>();
    //彈出元素時(shí),比較當(dāng)前要彈出的數(shù)值是否等于隊(duì)列出口的數(shù)值,如果相等則彈出
    //同時(shí)判斷隊(duì)列當(dāng)前是否為空
    void poll(int val) {
        if (!deque.isEmpty() && val == deque.peek()) {
            deque.poll();
        }
    }
    //添加元素時(shí),如果要添加的元素大于入口處的元素,就將入口元素彈出
    //保證隊(duì)列元素單調(diào)遞減
    //比如此時(shí)隊(duì)列元素3,1,2將要入隊(duì),比1大,所以1彈出,此時(shí)隊(duì)列:3,2
    void add(int val) {
        while (!deque.isEmpty() && val > deque.getLast()) {
            deque.removeLast();
        }
        deque.add(val);
    }
    //隊(duì)列隊(duì)頂元素始終為最大值
    int peek() {
        return deque.peek();
    }
}

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        if (nums.length == 1) {
            return nums;
        }
        int len = nums.length - k + 1;
        //存放結(jié)果元素的數(shù)組
        int[] res = new int[len];
        int num = 0;
        //自定義隊(duì)列
        MyQueue myQueue = new MyQueue();
        //先將前k的元素放入隊(duì)列
        for (int i = 0; i < k; i++) {
            myQueue.add(nums[i]);
        }
        res[num++] = myQueue.peek();
        for (int i = k; i < nums.length; i++) {
            //滑動(dòng)窗口移除最前面的元素,移除是判斷該元素是否放入隊(duì)列
            myQueue.poll(nums[i - k]);
            //滑動(dòng)窗口加入最后面的元素
            myQueue.add(nums[i]);
            //記錄對(duì)應(yīng)的最大值
            res[num++] = myQueue.peek();
        }
        return res;
    }
}

//解法二
//利用雙端隊(duì)列手動(dòng)實(shí)現(xiàn)單調(diào)隊(duì)列
/**
 * 用一個(gè)單調(diào)隊(duì)列來(lái)存儲(chǔ)對(duì)應(yīng)的下標(biāo),每當(dāng)窗口滑動(dòng)的時(shí)候,直接取隊(duì)列的頭部指針對(duì)應(yīng)的值放入結(jié)果集即可
 * 單調(diào)隊(duì)列類似 (tail -->) 3 --> 2 --> 1 --> 0 (--> head) (右邊為頭結(jié)點(diǎn),元素存的是下標(biāo))
 */
class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        ArrayDeque<Integer> deque = new ArrayDeque<>();
        int n = nums.length;
        int[] res = new int[n - k + 1];
        int idx = 0;
        for(int i = 0; i < n; i++) {
            // 根據(jù)題意,i為nums下標(biāo),是要在[i - k + 1, i] 中選到最大值,只需要保證兩點(diǎn)
            // 1.隊(duì)列頭結(jié)點(diǎn)需要在[i - k + 1, i]范圍內(nèi),不符合則要彈出
            while(!deque.isEmpty() && deque.peek() < i - k + 1){
                deque.poll();
            }
            // 2.既然是單調(diào),就要保證每次放進(jìn)去的數(shù)字要比末尾的都大,否則也彈出
            while(!deque.isEmpty() && nums[deque.peekLast()] < nums[i]) {
                deque.pollLast();
            }

            deque.offer(i);

            // 因?yàn)閱握{(diào),當(dāng)i增長(zhǎng)到符合第一個(gè)k范圍的時(shí)候,每滑動(dòng)一步都將隊(duì)列頭節(jié)點(diǎn)放入結(jié)果就行了
            if(i >= k - 1){
                res[idx++] = nums[deque.peek()];
            }
        }
        return res;
    }
}

到了這里,關(guān)于239. 滑動(dòng)窗口最大值的文章就介紹完了。如果您還想了解更多內(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)文章

  • LeetCode 239.滑動(dòng)窗口的最大值 Hot100 單調(diào)棧

    給你一個(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)窗口中的最大值? 。 示例 1: 示例 2: 提示: 1 = nums.length = 105 -104?= nums[i] = 104 1 = k = num

    2024年02月20日
    瀏覽(17)
  • day12 | 239. 滑動(dòng)窗口最大值、347.前 K 個(gè)高頻元素、

    目錄: 題目鏈接: https://leetcode.cn/problems/sliding-window-maximum/ https://leetcode.cn/problems/top-k-frequent-elements/ 239.?滑動(dòng)窗口最大值 給你一個(gè)整數(shù)數(shù)組? nums ,有一個(gè)大小為? k ?**的滑動(dòng)窗口從數(shù)組的最左側(cè)移動(dòng)到數(shù)組的最右側(cè)。你只可以看到在滑動(dòng)窗口內(nèi)的? k ?個(gè)數(shù)字?;瑒?dòng)窗口每

    2024年02月08日
    瀏覽(32)
  • 代碼隨想錄復(fù)習(xí) 1047. 刪除字符串中的所有相鄰重復(fù)項(xiàng) 150 逆波蘭表達(dá)式求值 239 滑動(dòng)窗口最大值

    1047. 刪除字符串中的所有相鄰重復(fù)項(xiàng) 代碼如下? func?removeDuplicates(s?string)?string?{ ????????????var??stack?[]byte? ?//結(jié)果棧數(shù)組 ????????????for?i?:=?0?;?i??len(s)?;?i++?{ ????????????????if?len(stack)??0??stack[len(stack)-1]?==?s[i]?{? //如果當(dāng)前遍歷到的元素

    2024年02月05日
    瀏覽(26)
  • 【算法題解】23. 「滑動(dòng)窗口最大值」單調(diào)隊(duì)列解法

    【算法題解】23. 「滑動(dòng)窗口最大值」單調(diào)隊(duì)列解法

    這是一道 困難 題 題目來(lái)自:https://leetcode.cn/problems/sliding-window-maximum/ 給你一個(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)窗口中的最大值 。 示例 1: 示

    2023年04月11日
    瀏覽(28)
  • 算法刷題Day 13 滑動(dòng)窗口最大值+前K個(gè)高頻元素

    乍一看有點(diǎn)單調(diào)棧的意思,但其實(shí)不是。 仔細(xì)想想應(yīng)該是用優(yōu)先隊(duì)列,似乎也不對(duì),從滑動(dòng)窗口出來(lái)的元素不好從隊(duì)列中刪除 看了隨想錄之后,是用到單調(diào)隊(duì)列 使用單調(diào)隊(duì)列有坑的地方: case: nums =[-7,-8,7,5,7,1,6,0], k = 4 單調(diào)隊(duì)列在push的時(shí)候,如果紅框?yàn)?= 號(hào),那么結(jié)果會(huì)出

    2024年02月13日
    瀏覽(28)
  • 單調(diào)隊(duì)列-滑動(dòng)窗口最大值

    Problem: 239. 滑動(dòng)窗口最大值 輸入一個(gè)數(shù)組nums,滑動(dòng)窗口k遍歷該數(shù)組,輸出得到的最大值數(shù)組; 示例1: 輸入:nums = [1,3,-1,-3,5,3,6,7], k = 3 輸出:[3,3,5,5,6,7] 構(gòu)造一個(gè)單調(diào)隊(duì)列表示當(dāng)前窗口中單調(diào)遞減的隊(duì)列,隊(duì)列的頭就是最大值,為保證這個(gè)隊(duì)列是窗口數(shù)據(jù)的表示,每次判斷隊(duì)

    2024年02月22日
    瀏覽(25)
  • 華為OD-滑動(dòng)窗口最大值

    給你一個(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)窗口中的最大值? 。 示例二 代碼實(shí)現(xiàn)

    2024年02月11日
    瀏覽(27)
  • 力扣刷題-隊(duì)列-滑動(dòng)窗口最大值

    力扣刷題-隊(duì)列-滑動(dòng)窗口最大值

    給定一個(gè)數(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)窗口中的最大值。 進(jìn)階: 在線性時(shí)間復(fù)雜度內(nèi)解決此題? 參考:https://www.programmercarl.com/0239.%E6%BB%91%E5%8A

    2024年02月06日
    瀏覽(23)
  • 【LeetCode熱題100】【子串】滑動(dòng)窗口最大值

    【LeetCode熱題100】【子串】滑動(dòng)窗口最大值

    題目 給你一個(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)窗口中的最大值? 。 示例 1: 示例 2: 提示: 1 = nums.length = 105 -104?= nums[i] = 104 1 =

    2024年01月19日
    瀏覽(25)
  • 力扣熱門100題之滑動(dòng)窗口最大值【困難】

    力扣熱門100題之滑動(dòng)窗口最大值【困難】

    給你一個(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)窗口中的最大值 。 示例 1: 輸入:nums = [1,3,-1,-3,5,3,6,7], k = 3 輸出:[3,3,5,5,6,7] 解釋: 滑動(dòng)窗口的位置

    2024年02月16日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包