Home
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 设计模式
  • JavaSE
  • JVM
  • JUC
  • Netty
  • CPP
  • QT
  • UE
  • Go
  • Gin
  • Gorm
  • HTML
  • CSS
  • JavaScript
  • vue2
  • TypeScript
  • vue3
  • react
  • Spring
  • SpringMVC
  • Mybatis
  • SpringBoot
  • SpringSecurity
  • SpringCloud
  • Mysql
  • Redis
  • 消息中间件
  • RPC
  • 分布式锁
  • 分布式事务
  • 个人博客
  • 弹幕视频平台
  • API网关
  • 售票系统
  • 消息推送平台
  • SaaS短链接系统
  • Linux
  • Docker
  • Git
GitHub (opens new window)
Home
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 设计模式
  • JavaSE
  • JVM
  • JUC
  • Netty
  • CPP
  • QT
  • UE
  • Go
  • Gin
  • Gorm
  • HTML
  • CSS
  • JavaScript
  • vue2
  • TypeScript
  • vue3
  • react
  • Spring
  • SpringMVC
  • Mybatis
  • SpringBoot
  • SpringSecurity
  • SpringCloud
  • Mysql
  • Redis
  • 消息中间件
  • RPC
  • 分布式锁
  • 分布式事务
  • 个人博客
  • 弹幕视频平台
  • API网关
  • 售票系统
  • 消息推送平台
  • SaaS短链接系统
  • Linux
  • Docker
  • Git
GitHub (opens new window)
  • 哈希表

  • 双指针

  • 数组

  • 字符串

  • 链表

  • 树

  • 回溯

  • 动态规划

  • 图

  • 二分查找

  • 贪心

  • 栈&队列

    • 单调栈
    • 单调队列
      • 239. 滑动窗口最大值
      • 2487. 从链表中移除节点
      • 1499. 满足不等式的最大值
      • 862. 和至少为 K 的最短子数组
      • 1425. 带限制的子序列和
    • 栈模拟
  • 堆

  • 位运算

  • 数据结构设计

  • rui的精选题单

  • 笔试真题

  • LeetCode周赛

  • ACM模式输入输出
  • 数学

  • 数据结构与算法
  • 栈&队列
Nreal
2023-11-30
目录

单调队列

# 239. 滑动窗口最大值 (opens new window)

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        if(nums==null || nums.length<2)
            return nums;
        LinkedList<Integer> que = new LinkedList<>();// 单调减队列
        int[] ret = new int[nums.length-k+1];
        for(int i=0;i<nums.length;i++){
            while(!que.isEmpty() && nums[que.peekLast()]<=nums[i])
                que.pollLast();
            que.addLast(i);
            // 超过窗口
            if(que.peek()<=i-k)
                que.poll();
            if(i-k+1>=0)
                ret[i-k+1] = nums[que.peek()];
        }
        return ret;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 2487. 从链表中移除节点 (opens new window)

方法一:单调队列

class Solution {
    public ListNode removeNodes(ListNode head) {
        LinkedList<ListNode> que = new LinkedList<>();
        ListNode node = head;
        while(node!=null){
            while(!que.isEmpty() && que.peekLast().val<node.val){
                que.pollLast();
            }
            que.offerLast(node);
            node = node.next;
        }
        ListNode newHead = que.poll();
        ListNode p = newHead;
        while(!que.isEmpty()){
            p.next = que.poll();
            p = p.next;
        }
        return newHead;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

方法二:递归


1

# 1499. 满足不等式的最大值 (opens new window)

# 862. 和至少为 K 的最短子数组 (opens new window)

# 1425. 带限制的子序列和 (opens new window)

单调栈
栈模拟

← 单调栈 栈模拟→

Theme by Vdoing | Copyright © 2021-2024
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式