单调栈第二天(还没写完)

503.下一个更大元素II

力扣题目链接(opens new window)

给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。

示例 1:

  • 输入: [1,2,1]
  • 输出: [2,-1,2]
  • 解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大的数;第二个 1 的下一个最大的数需要循环搜索,结果也是 2。

看到题目的第一想法

        利用昨天的单调栈的思路来写

        但是它是循环数组该怎么解决?

        遍历完一次后再遍历一次,将栈中剩余的弹出

        最后剩余的赋值为-1

        成功做出来

看到代码随想录的想法

        没有我这么麻烦,for循环范围放大为2*length,nums[i%length]取模,逻辑和之前相同

        若当前比栈里的小则直接存入

        若当前比栈里的大,则弹出,栈顶下标对应的第一个最大值为栈里的值

自己实现时出现的困难

        把result全部赋值为-1 自己就不用处理-1了

 

class Solution {
    public int[] nextGreaterElements(int[] nums) {
        //也是用单调栈来写?
        //for循环两次到末尾
        Stack<Integer> stack = new Stack<>();
        //需要遍历到当前下标的前一个位置?
        stack.push(0);
        int[] result = new int[nums.length];
        for(int i=1;i<nums.length;i++){
            if(nums[stack.peek()]>=nums[i]){
                stack.push(i);
            }else{
                while(!stack.isEmpty()&&nums[stack.peek()]<nums[i]){
                    result[stack.peek()] = nums[i];
                    stack.pop();
                }
                //不要忘了把这个值也push进去
                stack.push(i);
            }
        }
        //此时stack中残留的元素:
        //1 nums[i]末尾的元素
        //2 比较大的几个元素
        if(!stack.isEmpty()){
        for(int i=0;i<nums.length;i++){            
            while(!stack.isEmpty()&&nums[stack.peek()]<nums[i]){
                    //弹出来的下标对应result 的下标
                    result[stack.peek()] = nums[i];
                    stack.pop();
            }
        }
        }
        while(!stack.isEmpty()){
            result[stack.peek()] = -1;
            stack.pop();
        }
        return result;
    }
}

42. 接雨水

力扣题目链接(opens new window)

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

示例 1:

  • 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
  • 输出:6
  • 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。

看到题目的第一想法

        用单调栈,没想清楚处理逻辑,要怎么计算雨水

看到代码随想录的第一想法

       用单调栈,

       遇到第一个比栈顶大的元素时,弹出栈顶做记录,再利用当前遍历到的值计算差值和下标差值

自己实现时遇到的困难

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++位图的应用与布隆过滤器

位图的概念 用每一个二进制比特位来表示某种状态&#xff0c;适用于海量数据&#xff0c;通常用于判断某个数据是否存在 以上面试题可以用位图来解决&#xff1a;用一个二进制比特位来表示数据是否存在--二进制比特位为1表示存在&#xff0c;为0表示不存在 位图的模拟实现 #…

第五篇【传奇开心果】BeeWare的Toga库开发移动应用示例: Local Storage本地数据处理

传奇开心果博文系列 系列博文目录BeeWare的Toga库开发移动应用示例系列博文目录前言一、本地读取存储数据示例二、表格显示本地数据和清除数据示例三、添加本地数据查询功能示例四、添加本地数据修改和删除功能示例五、添加本地数据增加功能示例系列博文目录 BeeWare的Toga库开…

C语言 服务器编程-定时器

定时器 引言定时器的基本逻辑定时器信号事件 引言 传统的TCP socket模型是基于套接字&#xff08;文件描述符&#xff09;来传递消息的&#xff0c;但是文件描述符资是有限的&#xff0c;如果大量的连接占用了大量的文件描述符&#xff0c;那么新来的请求可能就无法申请到文件…

Redis为什么速度快:数据结构、存储及IO网络原理总结

Redis&#xff0c;作为内存数据结构存储的佼佼者&#xff0c;其高性能表现一直备受赞誉。那么&#xff0c;Redis究竟是如何实现这一点的呢&#xff1f;接下来&#xff0c;我们将更深入地探讨其背后的关键技术&#xff0c;并提供进一步的优化策略。 一、内存存储与数据结构设计…

MySQL数据定义语言DDL

MySQL数据定义语言DDL 目录 MySQL数据定义语言DDLDDL关键字数据定义语言DDL1.查看数据库2.创建库3.删除库4.切换库5.创建表6.删除表7.查看表8.查看表属性9.插入列10.修改列11.设置主键12.设置外键并绑定主键13.设置自增14.删除列15.重命名16.设定默认值17.添加备注18.设置是否可…

完成NAT实验

实验要求&#xff1a; 步骤一&#xff1a;配置vlan vlan b 2 3 interface GigabitEthernet 0/0/2 port link-type access port default vlan 2 interface GigabitEthernet 0/0/3 port link-type access port default vlan 3 interface GigabitEthernet 0/0/1 port link-type…

svg 属性详解:填充与边框

svg 属性详解&#xff1a;填充与边框 1 颜色和透明度2 填充规则 fill-rule3 边框样式3.1 stroke-width3.2 stroke-linecap3.3 stroke-linejoin3.4 stroke-dasharray 1 颜色和透明度 图像都有颜色&#xff0c;svg 中可以使用属性 fill 和 stroke 来修改图形的颜色。fill 属性设置…

真香一个团队协作工具部署

部署 version: "3.4"services:mongo:image: mongocontainer_name: twake-dbvolumes:- /opt/Twake/data:/data/dbnode:image: twaketech/twake-node:latestcontainer_name: twake-webports:- 3345:3000# - 8000:3000environment:- DEVproduction- SEARCH_DRIVERmong…

「 网络安全术语解读 」通用攻击模式枚举和分类CAPEC详解

引言&#xff1a;在网络安全领域&#xff0c;了解攻击者的行为和策略对于有效防御攻击至关重要。然而&#xff0c;攻击模式的描述和分类方式缺乏统一性和标准化。为了解决这个问题&#xff0c;MITRE公司创建了CAPEC标准&#xff0c;以提供一个共享和统一的攻击模式分类框架。 1…

用友U8接口-系统管理(3)

教程目录 部署和简要说明(1) 获取token&数据字段(2) 概括 本文的操作需要正确部署U8HttpApi对本套接口系统管理目录说明 系统管理 获取token 参考获取token 根据sql进行查询 此POST方式接口运行调用者传入SQL语句&#xff0c;或者将SQL语句写到xml文件中&#xff0…

Redis 面试题 | 13.精选Redis高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

如何实现无公网IP实现远程访问MongoDB文件数据库

&#x1f4d1;前言 本文主要是如何实现无公网IP实现远程访问MongoDB文件数据库的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x…

快递对账教程

对企业行政人员来说&#xff0c;快递对账管理&#xff0c;应该是工作中最为头疼之事了。 最开始寄快递还是手写纸质快递单的时候&#xff0c;对企业行政来说&#xff0c;快递对账管理&#xff0c;本来就是一件麻烦事。当时大部分企业采用的都是寄前审批&#xff0c;寄后报销的…

数据结构·顺序表经典例题(双指针)

本节讲解两道顺序表经典例题&#xff0c;运用到了双指针的思想 双指针并不是两个指针&#xff0c;而是用两个类似指针的东西去扫描数组&#xff0c;以达到简化运算的效果 1. 移除元素 OJ链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平…

五、Flask学习之MySQL

五、Flask学习之MySQL 1. 下载MySQL 下载教程&#xff1a;MySQL安装及可视化工具SQLyog下载 2.常用指令 2.1. 查看已有数据库 show databases;2.2. 创建数据库 create database 名字 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;2.3. 删除数据库 drop database 名字;…

《WebKit 技术内幕》学习之十五(4):Web前端的未来

4 Cordova项目 Cordova是一个开源项目&#xff0c;能够提供将Web网页打包成本地应用格式的可运行文件。读者可能对Cordova项目陌生&#xff0c;但是大家可能对它的前身非常熟悉&#xff0c;那就是PhoneGap项目&#xff0c;它后来被Adobe公司收购。 图15-4描述了Cordova的主要工…

Topaz Video AI:无损放大,让你的视频更清晰!

在当今的数字时代&#xff0c;视频内容的重要性越来越受到人们的关注。无论是在社交媒体上分享生活片段&#xff0c;还是在商业领域中制作宣传视频&#xff0c;人们都希望能够展现出更高质量的视频内容。 然而&#xff0c;由于各种原因&#xff0c;我们经常会面临一个问题&…

港口集装箱堆场温湿度监控MQTT无线传输智能节点

设备互联互通的时代已经到来&#xff0c;不同的设备之间需要实现数据互通&#xff0c;提高生产效率和管理效率。因此&#xff0c;一款功能齐全、性能稳定的设备显得尤为重要。我们来介绍一款4G/5G无线远程io模块。具有8DI兼容干湿节点、4DO继电器、6AI可选电流型4-20mA电压型0-…

常规的管理系统除了适用该有的范儿一定要有!气质上不能输

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 常规的管理系统除了适用该有的范儿一定要有!气质上不能输 在现今快速发展的商业环境中…

HCIA学习作业三

要求&#xff1a; 拓扑图&#xff1a; <AR1>ping 5.5.5.1 <AR1>display ip interface brief <AR1>display ip routing-table <AR1>display ip routing-table protocol static <AR2>ping 5.5.5.1 <AR2>display ip interface brief <…