代码随想录算法训练营第五十三天| 739. 每日温度、 496.下一个更大元素 I、503.下一个更大元素II

LeetCode 739. 每日温度

题目链接:https://leetcode.cn/problems/daily-temperatures/description/
文章链接:https://programmercarl.com/0739.%E6%AF%8F%E6%97%A5%E6%B8%A9%E5%BA%A6.html

思路

 * 单调栈的本质是空间换时间,因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次。* 单调栈里只需要存放元素的下标i就可以了,如果需要使用对应的元素,直接T[i]就可以获取。* 单调栈的本质其实是记录遍历过的元素,单调栈的顺序由栈顶到栈底是单调递增的* 当我们遍历的元素大于栈顶元素的时候,因为栈顶元素一定存放的是栈中最大的元素,则当前元素一定是第一个比栈顶元素大的元素。* 当我们遍历的元素小于等于栈顶元素的时候,当前元素入栈
    public int[] dailyTemperatures(int[] temperatures) {Stack<Integer> stack = new Stack<>();int[] res = new int[temperatures.length];stack.push(0);for (int i = 1; i < temperatures.length; i++) {if (temperatures[i] <= temperatures[stack.peek()]){stack.push(i);}else {while (!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]){res[stack.peek()] = i - stack.peek();stack.pop();}stack.push(i);}}return res;}

LeetCode 496.下一个更大元素 I

题目链接:https://leetcode.cn/problems/next-greater-element-i/description/
文章链接:https://programmercarl.com/0496.%E4%B8%8B%E4%B8%80%E4%B8%AA%E6%9B%B4%E5%A4%A7%E5%85%83%E7%B4%A0I.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE

思路

本题思路同每日温度一样,都是利用单调栈来解体,唯一不同的是需要对Num1数组做一个映射。

    public int[] nextGreaterElement(int[] nums1, int[] nums2) {Stack<Integer> stack = new Stack<>();HashMap<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums1.length; i++) {map.put(nums1[1], i);}stack.push(0);int[] res = new int[nums2.length];Arrays.fill(res, -1);for (int i = 1; i < nums2.length; i++) {if (nums2[i] <= nums2[stack.peek()]){stack.push(i);}else {while (!stack.isEmpty() && nums2[i] > nums2[stack.peek()]){res[map.get(stack.peek())] = i - stack.peek();stack.pop();}stack.push(i);}}return res;}

LeetCode 503.下一个更大元素II

题目链接:https://leetcode.cn/problems/next-greater-element-ii/description/
文章链接:https://programmercarl.com/0503.%E4%B8%8B%E4%B8%80%E4%B8%AA%E6%9B%B4%E5%A4%A7%E5%85%83%E7%B4%A0II.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE

思路

本题思路同每日温度一样,都是利用单调栈来解体,不过数组是一个首尾相连的数组,我们只需要将两个数组拼接即可

 public int[] nextGreaterElements(int[] nums) {//边界判断if(nums == null || nums.length <= 1) {return new int[]{-1};}int size = nums.length;int[] result = new int[size];//存放结果Arrays.fill(result,-1);//默认全部初始化为-1Stack<Integer> st= new Stack<>();//栈中存放的是nums中的元素下标for(int i = 0; i < 2*size; i++) {while(!st.empty() && nums[i % size] > nums[st.peek()]) {result[st.peek()] = nums[i % size];//更新resultst.pop();//弹出栈顶}st.push(i % size);}return result;}

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

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

相关文章

【论文阅读】transformer及其变体

写在前面&#xff1a; transformer模型已经是老生常谈的一个东西&#xff0c;以transformer为基础出现了很多变体和文章&#xff0c;Informer、autoformer、itransformer等等都是顶刊顶会。一提到transformer自然就是注意力机制&#xff0c;变体更是数不胜数&#xff0c;一提到…

【目标检测】DN-DETR

一、引言 论文&#xff1a; DN-DETR: Accelerate DETR Training by Introducing Query DeNoising 作者&#xff1a; IDEA 代码&#xff1a; DN-DETR 注意&#xff1a; 该算法是在DAB-DETR基础上的改进&#xff0c;在学习该算法前&#xff0c;建议掌握DETR、DAB-DETR等相关知识…

TCP和UDP的区别以及应用场景

TCP&#xff08;传输控制协议&#xff09;和UDP&#xff08;用户数据报协议&#xff09;是两种不同的传输层协议 区别 TCP是面向连接的&#xff0c;UDP是无连接的&#xff1b; TCP是可靠的&#xff0c;UDP是不可靠的&#xff1b; TCP是面向字节流的&#xff0c;UDP是面向数据…

如何高效配置与使用Pip换源

目录 1. Pip源的基本概念 1.1 常见的国内镜像源 2. 临时换源 2.1 使用命令行参数指定镜像源 2.2 安装多个包时指定镜像源 3. 永久换源 3.1 修改用户级配置文件 3.1.1 创建和编辑配置文件 3.2 修改全局配置文件 3.2.1 创建和编辑全局配置文件 4. 验证换源配置 5. 切…

VMamba: Visual State Space Model论文笔记

文章目录 VMamba: Visual State Space Model摘要引言相关工作Preliminaries方法网络结构2D-Selective-Scan for Vision Data(SS2D) VMamba: Visual State Space Model 论文地址: https://arxiv.org/abs/2401.10166 代码地址: https://github.com/MzeroMiko/VMamba 摘要 卷积神…

防火墙共性检测技术

防火墙共性检测技术 防火墙共性检测技术是指防火墙在监控和控制网络流量时&#xff0c;共同采用的一些检测和过滤方法。无论是哪种类型的防火墙&#xff0c;这些技术都可以用于识别和阻止恶意流量&#xff0c;确保网络安全。以下是防火墙共性检测技术的详细介绍&#xff0c;包…

axios的基本使用和vue脚手架自带的跨域问题解决

axios的基本使用和vue脚手架自带的跨域问题解决 1. axios 1.1 导入axios npm i axios1.2 创建serve1.js serve1.js const express require(express) const app express()app.use((request,response,next)>{console.log(有人请求服务器1了);console.log(请求来自于,re…

go Channel 原理 (一)

Channel 设计原理 不要通过共享内存的方式进行通信&#xff0c;而是应该通过通信的方式共享内存。 在主流编程语言中&#xff0c;多个线程传递数据的方式一般都是共享内存。 Go 可以使用共享内存加互斥锁进行通信&#xff0c;同时也提供了一种不同的并发模型&#xff0c;即通…

npm ci vs npm i

npm ci vs npm i 几个关键区别&#xff1a;该选择哪个&#xff1f; 通过 npm ci 和 npm i 两个命令&#xff0c;都可安装项目的依赖。那么这两个命令有什么区别呢&#xff1f; 几个关键区别&#xff1a; 目的和用途&#xff1a; npm ci &#xff1a;根据项目中的 package-lock…

AI奏响未来乐章:音乐界的革命性变革

AI在创造还是毁掉音乐 引言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;正在逐渐渗透到我们生活的每一个角落&#xff0c;音乐领域也不例外。AI技术的引入&#xff0c;不仅为音乐创作、教育、体验带来了革命性的变革&#xff0c;更为整个音乐产业注入了…

顺序表应用——通讯录

在本篇之前的顺序表专题我们已经学习的顺序表的实现&#xff0c;了解了如何实现顺序表的插入和删除等功能&#xff0c;那么在本篇当中就要学习基于顺序表来实现通讯录&#xff0c;在通讯录当中能实现联系人的增、删、查改等功能&#xff0c;接下来就让我们一起来实现通讯录吧&a…

grpc学习golang版( 五、多proto文件示例 )

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 第七章 客户端流式传输 第八章 双向流示例 文章目录 一、前言二、定义proto文件2.1 公共proto文件2.2 语音唤醒proto文…

解决Vue3项目中跨域问题的步骤

决Vue3项目中跨域问题的步骤可以按照以下方式清晰地分点表示和归纳&#xff1a; 1. 使用代理服务器&#xff08;Proxy&#xff09; 步骤&#xff1a; 在Vue项目的根目录下找到或创建vue.config.js文件。在vue.config.js中配置devServer的proxy选项。设定需要代理的接口前缀&a…

基于局域网下的服务器连接、文件传输以及内网穿透教程 | 服务器连接ssh | 服务器文件传输scp | 内网穿透frp | 研究生入学必备 | 深度学习必备

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f4cc;本篇博客分享的是基于局域网下的服务器连接&#x1f517;、文件传输以及内网穿透教程&#xff0c;内容非常完备✨&#xff0c;涵盖了在服务器上做深度学…

树莓派3B读写EEPROM芯片AT24C256

AT24C256是一个Atmel公司的EEPROM存储芯片&#xff0c;容量是256K个bit&#xff08;也就是32K字节&#xff09;&#xff0c;I2C接口&#xff0c;而树莓派正好有I2C接口&#xff0c;如下图蓝框中的4个IO口&#xff0c; 把AT24C256和这4个口接在一起&#xff0c;这样硬件就准备好…

Django 页面展示模型创建表的数据

1&#xff0c;添加视图函数 Test/app8/urls.py from django.shortcuts import render from .models import Userdef create_user(request):if request.method POST:username request.POST.get(username)email request.POST.get(email)# ... 获取其他字段的值# 创建用户实例…

【Python学习篇】Python实验小练习——异常处理(十三)

个人名片&#xff1a; &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir2025WB…

【教程】5分钟直接了解随机森林模型

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 目录 一、什么是随机森林模型1.1.随机森林模型介绍1.2.为什么随机森林要用多棵决策树 二、怎么训练一个随机森林模型2.1.训练一个随机森林模型 随机森林模型是机器学习中常用的模型之一&#xff0c;它是决策树模型的一…

Node.js全栈指南:静态资源服务器

上一章【认识 MIME 和 HTTP】。 我们认识和了解了 MIME 的概念和作用&#xff0c;也简单地学习了通过浏览器控制台查看请求和返回的用法。 通过对不同的 HTML、CSS、JS 文件进行判断&#xff0c;设置不同的 MIME 值&#xff0c;得以让我们的浏览器正正确地接收和显示不同的文…