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

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;
    }
}

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

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

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

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


http://www.kler.cn/a/610213.html

相关文章:

  • 深入理解指针(3)(C语言版)
  • 如何自定义5x5键盘
  • 【鸿蒙开发】第五十二章 PDF Kit(PDF服务)
  • 【C++笔记】C++IO流的深度剖析
  • 移动WiFi设备品牌推荐与选购指南
  • Power Automate Send an email (V2)组件的邮件体中插入超链接
  • 花粉过敏激增背后:气候变化如何重塑我们的生活?疾风气象大模型助力未来气象探索
  • Photoshop PS 2025图像处理 windows
  • 黑盒测试与白盒测试详解
  • 蓝桥杯第十届 特别的数
  • Git Bash 设置Notepad++作为默认编辑器
  • 在linux部署网站
  • [plugin:vite:import-analysis] Cannot find module ‘vuex\dist\vuex.esm-bundler
  • 【Qt】Ubuntu22.04使用命令安装Qt5和Qt6
  • 蓝桥杯--奇怪的捐赠
  • C++ stack容器总结
  • python中的面对过程
  • AndroidStudio导入jar,aar到项目kts/groovy方式
  • 蓝桥杯备考---->激光炸弹(二维前缀和)
  • 【深度学习新浪潮】展平RVQ技术详解