图解算法数据结构-LeetBook-栈和队列04_望远镜中最高的海拔_滑动窗口

news2024/11/18 6:36:47

科技馆内有一台虚拟观景望远镜,它可以用来观测特定纬度地区的地形情况。该纬度的海拔数据记于数组 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

提示:
你可以假设输入总是有效的,在输入数组不为空的情况下:
1 <= limit <= heights.length
-10000 <= heights[i] <= 10000

解法一

从头到尾遍历每个状态的窗口

class Solution {
public:
    vector<int> maxAltitude(vector<int>& heights, int limit) {
        vector<int> res;
        if(heights.empty()) return res;
        int max_;
        for(int i = 0;i <= int(heights.size())-limit;i++){
            max_ = heights[i];
            for(int j = 1;j < limit;j++){
                if(heights[i+j] > max_) max_ = heights[i+j];
            }
            res.push_back(max_);
        }
        return res;
    }
};

解法一

解法二

上一个方法显然有很多冗余的比较,比如

7 2 8 10
3

滑动到第二个状态的时候,因为8所在的位置在窗口左侧的右边,所以只需要将新加入的10和8(之前的最大值)比较

8 2 6 4
3

滑动到第二个状态的时候,因为8所在的位置在窗口左侧,所以需要重新在新窗口中找最大值
基于以上思想

class Solution {
public:
    vector<int> maxAltitude(vector<int>& heights, int limit) {
        vector<int> res;
        if(heights.empty()) return res;
        if(limit == 1) return heights;
        int len = heights.size(), pre_max_index = 0, max_ = heights[0];
        //计算第一个max
        for(int i = 0;i < limit;i++){
            if(heights[i] > max_){
                max_ = heights[i];
                pre_max_index = i;
            } 
        }
        res.push_back(max_);

        for(int i = 1;i <= len-limit;i++){
            if(i < pre_max_index){
                //如果这次窗口左侧在之前最大值的索引左侧(不包括之前最大值的索引)
                //只需要比较新加入的值和之前最大值
                if(heights[i+limit-1] > max_){
                    max_ = heights[i+limit-1];
					pre_max_index = i+limit-1;
                }
                res.push_back(max_);
            } else {//重新开始一个最大值,默认值为heights[i]
                int temp = limit;
                max_ = heights[i];
                pre_max_index = i;
                while(temp--){
                    if(heights[i+temp] > max_){
                        pre_max_index = i+temp;
                        max_ = heights[i+temp];
                    }
                }
                res.push_back(max_);
            }
        }
        return res;
    }
};

当然,如果limit为1,根本就不需要计算直接返回就行。
新加入的值: h e i g h t s [ i + l i m i t − 1 ] heights[i+limit-1] heights[i+limit1]
解法二

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1233726.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode2938. 区分黑球与白球

Every day a Leetcode 题目来源&#xff1a;2938. 区分黑球与白球 解法1&#xff1a;贪心 把 ‘0’ 挪到相应的位置。 类似于冒泡排序的思想&#xff0c;把 ‘0’ 挪到相应的位置。 示例&#xff1a; 代码&#xff1a; /** lc appleetcode.cn id2938 langcpp** [2938] 区…

【无矶之谈】编码能力堪比Copilot、Cursor、GPT-国内可用的智能AI编程

前言简述 Copilot Copilot 是一款由 OpenAI 推出的人工智能代码自动补全AI工具 早在2022年4月&#xff0c;我便写了一篇Github Copilot的申请及在Pycharm的配置和使用&#xff0c;那个时候我便在用AI进行编程&#xff0c;当时虽然用的不是很多&#xff0c;但也算接触了AI。 …

C#的类型转换

目录 一、简介二、基本类型转换1.整数类型转换1.隐式转换2.显式转换 2.浮点类型转换1.隐式转换2.显式转换 3.字符类型转换1.字符到整数的转换2.整数到字符的转换 4.布尔类型转换1.布尔到整数的转换2.整数到布尔的转换 三、隐式转换和显式转换四、装箱和拆箱五、自定义类型转换六…

2023年11月18日骑行海囗林场公园赏枫叶之旅:一场秋天的色彩盛宴

随着人们生活水平的提高&#xff0c;越来越多的人开始追求生活的品质和乐趣。骑行作为一种健康、环保的出行方式&#xff0c;受到了广泛的喜爱。在秋天这个美丽的季节&#xff0c;骑行海囗林场森林公园赏枫叶更是一种别样的体验。校长将为您记录这场秋天的色彩盛宴&#xff0c;…

VueH5公众号分享到微信朋友圈或好友

场景需求&#xff1a; 一般分享场景是在当前页面分享当前页面&#xff0c;但是业务需求是&#xff0c;在当前页面分享好几个其他页面的链接到朋友圈和好友。 PS&#xff1a;微信自带的分享面板是无法第三方唤起的&#xff0c;只能点三个点。 其次在微信公众号页也不支持自定义…

影视行业如何远程完整快速传输大文件?

影视行业是一个充满创意和协作的领域。在影视制作中&#xff0c;涉及到多个环节和部门&#xff0c;包括编剧、导演、摄影、剪辑、配音、视效等。这些环节和部门通常分布在不同的地点&#xff0c;甚至不同的国家。因此&#xff0c;影视制作过程中需要频繁进行远程传输&#xff0…

如果文件已经存在与git本地库中,配置gitignore能否将其从git库中删除

想把项目的前后台代码放到同一个git仓库管理&#xff0c;由于未设置.gitignore&#xff0c;就使用vscode做stage操作&#xff08;相当于git add . 命令 其中【.】点表示全部文件&#xff09;&#xff0c;观察将要入库的文件发现&#xff0c;node_modules、target、.idea、log等…

Django与Ajax

一、什么是Ajax AJAX&#xff08;Asynchronous Javascript And XML&#xff09;翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互&#xff0c;传输的数据为XML&#xff08;当然&#xff0c;传输的数据不只是XML&#xff0c;现在更多使用json…

CentOS用nginx搭建文件下载服务器

Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器&#xff0c;而且支持热部署&#xff0c;几乎可以做到 7 * 24 小时不间断运行&#xff0c;即使运行几个月也不需要重新启动。在工作中&#xff0c;我们经常会用到需要搭建文件服务器的情况&#xff0c;这里就以在linux下搭…

安防视频监控平台EasyCVR服务器部署后出现报错,导致无法级联到域名服务器,该如何解决?

视频监控平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;安防监控平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#xff0c;也能支持视频定时轮播。视频监控…

JavaScript 如何拷贝对像(Object)或者数组(Array)

目录 JavaScript数据拷贝类型 浅拷贝 深拷贝 举例&#xff1a; 浅拷贝 数组 对象 深拷贝 lodash cloneDeep使用示例 自定义深拷贝方法示例 JSON.parse() 和 JSON.stringify()使用示例 JavaScript数据拷贝类型 浅拷贝 数组可以使用Array.prototype.slice()方法 …

安卓毕业设计:基于安卓android微信小程序的超市购物系统

运行环境 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&a…

C++纯虚函数和抽象类 制作饮品案例(涉及知识点:继承,多态,实例化继承抽象类的子类,多文件实现项目)

一.纯虚函数的由来 在多态中&#xff0c;通常父类中虚函数的实现是毫无意义的&#xff0c;主要都是调用子类重写的内容。例如&#xff1a; #include<iostream>using namespace std;class AbstractCalculator { public:int m_Num1;int m_Num2;virtual int getResult(){r…

2023-11-20 LeetCode每日一题(最大子数组和)

2023-11-20每日一题 一、题目编号 53. 最大子数组和二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的…

装机 - 12400F有必要换成13400F吗

想组个跑AI大模型的机器&#xff0c;预算5000左右。3090&#xff0c;4090玩不起&#xff0c;搞了个2080ti魔改22G的。 大佬们帮忙看看这个配置咋样&#xff0c;12400F有必要换成13400F吗。 感觉13400f多出的四个能效核除了跑分作用不大&#xff1f;网上看别人说大小核架构用win…

麒麟KYSEC使用方法03-开启及关闭netctl

原文链接&#xff1a;麒麟KYSEC使用方法03-开启及关闭netctl hello&#xff0c;大家好啊&#xff0c;今天给大家带来麒麟KYLINOS的kysec使用方法系列文章第三篇内容----使用命令开启及关闭netctl&#xff0c;联网控制策略有三种模式&#xff0c;off/enforing/warning&#xff0…

VsCode连接远程Linux编译环境的便捷处理

1.免输登录密码 免输命令的正确方法是使用公钥和私鈅在研发设备&#xff0c;和linux服务器上校验身份。公钥和私钥可在windows系统上生成。公钥要发送到linux服务器。私钥需要通知给本地的ssh客户端程序&#xff0c;相关的操作如下&#xff1a; 生成 SSH Key&#xff1a; 打开…

FCOS: Fully Convolutional One-Stage Object Detection 论文源代码复现

FCOS源代码github地址为&#xff1a; FCOS 这篇论文主要是关于目标检测的&#xff0c;今天跑一下它的实验&#xff0c;我是在autodl租的RTX 2080 Ti&#xff0c;因为这个代码比较久&#xff0c;所以Pytoch版本可能不可以装太高&#xff0c;我的镜像CUDA版本为10.1&#xff0c;…

深入 Django 的 URL 分发器

概要 在 Django 的 MVC 架构中&#xff0c;URL 分发器扮演着至关重要的角色&#xff0c;它负责将用户的请求路由到相应的视图函数或类。这一机制不仅保证了 Django 应用的高度可扩展性&#xff0c;还为开发者提供了灵活的 URL 设计能力。本文将详细介绍 Django 中的 URL 分发器…

线性表,但是是Java中数组实用使用!

线性表定义&#xff1a; 由n (n≥0)个数据特性相同的元素构成的有限序列称为线性表&#xff0c;(n0)的时候被称为空表。 线性表的顺序表示 线性表的顺序存储又被称为顺序表 优点 无需为表示表中元素之间的逻辑关系而增加额外的存储空间可以随意读取任意位置的元素 缺点 插入…