当前位置: 首页 > news >正文

Day24:队列的最大值

科技馆内有一台虚拟观景望远镜,它可以用来观测特定纬度地区的地形情况。该纬度的海拔数据记于数组 heights ,其中 heights[i] 表示对应位置的海拔高度。请找出并返回望远镜视野范围 limit 内,可以观测到的最高海拔值。

示例 1:

输入:heights = [14,2,27,-5,28,13,39], limit = 3
输出:[27,27,28,28,39]
解释:
  滑动窗口的位置                最大值
---------------               -----
[14 2 27] -5 28 13 39          27
14 [2 27 -5] 28 13 39          27
14 2 [27 -5 28] 13 39          28
14 2 27 [-5 28 13] 39          28
14 2 27 -5 [28 13 39]          39

LCR 183. 望远镜中最高的海拔 - 力扣(LeetCode) 

 

class Solution {
    public int[] maxAltitude(int[] heights, int limit) {
        if(heights.length == 0 || limit == 0) return new int[0];
        Deque<Integer> deque = new LinkedList<>();
        int[] res = new int[heights.length - limit + 1];
        int index = 0;
        for(int i = 0; i < heights.length; i++){
            while(!deque.isEmpty() && heights[deque.peekLast()] <= heights[i]){
                deque.pollLast();
            }

            deque.add(i);

            if(deque.peekLast() - limit == deque.peek()){
                deque.poll();
            }

            if((i + 1) >= limit){
                res[index] = heights[deque.peek()];
                index++;
            }
        }

        return res;
    }
}

选择用一个双端队列来维护窗口

首先队列里保存的是数组索引,方便比较窗口长度。

然后队头是要维护最大值的,所以如果不大于队头的元素会从队尾出去。

注意一下出队的条件。这个题写过一遍就不难。

相关文章:

  • 音视频新人如何快速上手nginx-rtmp-module
  • 人工智能之数学基础:瑞利商的推广形式——广义瑞利商
  • 如何排查C++程序的CPU占用过高的问题
  • Python爬虫:Feapder 的详细使用和案例
  • 在Ubuntu系统上安装连接服务器的图形化界面工具
  • 宏基因组产品升级!污染物降解酶数据库——不只是塑料降解!
  • ubuntu20.04安装教程
  • 网络安全可以考取哪些证书?
  • openGl片段着色器的含义
  • STM32【8】堆栈和段的概念(1)
  • ubuntu20 部署vnc server 使用VNC Viewer连接
  • 跨语言语言模型预训练
  • 2025年渗透测试面试题总结-某腾讯 - 一面(题目+回答)
  • MySQL数据库表的约束,关联及查询
  • 关于笔记本电脑突然没有wifi图标解决方案
  • 数据采集+AI
  • 3. 轴指令(omron 机器自动化控制器)——>MC_GearInPos
  • d9-326
  • 第11章:优化I/O_《C++性能优化指南》_notes
  • MyBatis 语法不支持 having 节点
  • 国铁集团:5月1日全国铁路预计发送旅客2250万人次
  • 马上评|启动最高层级医政调查,维护医学一方净土
  • 国铁集团去年收入12830亿元增3%,全年铁路运输利润总额创新高
  • 国务院任免国家工作人员:颜清辉任人社部副部长
  • 秦洪看盘|资金切换主线,重构市场风格
  • 习近平在上海考察