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

739. 每日温度

在这里插入图片描述

题目链接: 739. 每日温度
文档讲解:代码随想录
状态:不会

思路:
这道题需要找到下一个更大元素。
使用栈来存储未找到更高温度的下标,那么栈中的下标对应的温度从栈底到栈顶是递减的。这意味着,栈顶元素的温度是当前温度数组中未找到更高温度的最高温度的下标。

总结成一句话就是:在解决“下一个更大元素”问题时,遍历数组时,如果当前元素大于栈顶元素,就先将栈顶元素出栈并更新其结果,然后将当前元素入栈。

题解:

    public int[] dailyTemperatures(int[] temperatures) {int n = temperatures.length;int[] res = new int[n];  // 初始化结果数组,长度与温度数组相同Deque<Integer> stack = new LinkedList<>();  // 初始化栈,用于存储未找到更高温度的下标for (int i = 0; i < n; i++) {  // 遍历温度数组// 如果当前温度高于栈顶元素的温度,则更新结果数组// 使用栈来存储未找到更高温度的下标,栈中的下标对应的温度从栈底到栈顶是递减的。// 这意味着,栈顶元素的温度是当前温度数组中未找到更高温度的最高温度的下标。while (!stack.isEmpty() && temperatures[i] > temperatures[stack.peekLast()]) {int index = stack.pollLast();  // 弹出栈顶元素res[index] = i - index;  // 计算当前下标与栈顶元素下标的差值,并更新结果数组}stack.addLast(i);  // 将当前下标添加到栈中}return res;  // 返回结果数组}

496.下一个更大元素 I

在这里插入图片描述

题目链接: 496.下一个更大元素 I
文档讲解:代码随想录
状态:用的另一种方法

单调栈思路:

这题是属于找下一个更大元素,所以可以使用单调栈。

和每日温度类似,可以对nums2使用单调栈,即当前元素大于栈顶元素,就先将栈顶元素出栈并更新其结果,然后将当前元素入栈。但是这道题需要从nums2中找nums1元素,并且res的更新是按照nums1来的,所以可以将nums1中的元素存入哈希表中,如果nums2中遍历到的元素是nums1中的元素,则额外更新res。

题解:

    // 方法1: 暴力+哈希解法public int[] nextGreaterElement(int[] nums1, int[] nums2) {int[] res = new int[nums1.length];  // 结果数组HashMap<Integer, Integer> map = new HashMap<>();  // 存储 nums2 中元素的下标for (int i = 0; i < nums2.length; i++) {map.put(nums2[i], i);  // 将 nums2 中的元素及其下标放入 map 中}for (int i = 0; i < nums1.length; i++) {Integer index = map.get(nums1[i]);  // 获取 nums1 中元素在 nums2 中的下标for (int j = index; j < nums2.length; j++) {if (nums2[j] > nums1[i]) {  // 找到第一个比 nums1[i] 大的元素res[i] = nums2[j];  // 更新结果数组break;} else {res[i] = -1;  // 未找到更大元素,默认设置为 -1}}}return res;}// 方法2: 单调栈public int[] nextGreaterElement2(int[] nums1, int[] nums2) {int[] res = new int[nums1.length];  // 结果数组Arrays.fill(res, -1);  // 初始化结果数组为 -1HashMap<Integer, Integer> map = new HashMap<>();  // 存储 nums1 中元素的下标Deque<Integer> stack = new LinkedList<>();  // 初始化单调栈for (int i = 0; i < nums1.length; i++) {map.put(nums1[i], i);  // 将 nums1 中的元素及其下标放入 map 中}for (int i = 0; i < nums2.length; i++) {// 如果当前元素 nums2[i] 大于栈顶元素,则更新栈顶元素在结果数组中的值while (!stack.isEmpty() && nums2[stack.peekLast()] < nums2[i]) {Integer num = nums2[stack.pollLast()];  // 弹出栈顶元素if (map.containsKey(num)) {res[map.get(num)] = nums2[i];  // 更新结果数组中对应位置的值}}stack.addLast(i);  // 将当前元素下标加入栈中}return res;}

503.下一个更大元素II

在这里插入图片描述

题目链接: 503.下一个更大元素II
文档讲解:代码随想录
状态:磕磕绊绊

思路:
最直接的想法把两个数组拼接在一起,然后使用单调栈求下一个最大值。
优化的话在遍历的过程中模拟走了两边nums。

题解:

   public int[] nextGreaterElements(int[] nums) {int n = nums.length; // 获取数组的长度int[] res = new int[n]; // 结果数组,用来存储每个元素的下一个更大元素Arrays.fill(res, -1); // 初始化结果数组,默认值为-1Deque<Integer> stack = new LinkedList<>(); // 单调栈,用来存储数组元素的下标// 遍历2倍长度的数组,模拟循环数组for (int i = 0; i < 2 * n; i++) {// 如果当前元素大于栈顶元素,则更新栈顶元素在结果数组中的值while (!stack.isEmpty() && nums[i % n] > nums[stack.peekLast()]) {res[stack.pollLast()] = nums[i % n]; // 更新结果数组中对应下标的值}// 只将前n个元素的下标入栈if (i < n) {stack.addLast(i); // 将当前下标入栈}}return res; // 返回结果数组}

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

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

相关文章

Redis数据同步

文章简单介绍基于redis-shake的redis数据同步&#xff0c;该工具基于每个节点同步数据&#xff0c;即每个主节点需同步一次&#xff0c;才能完成整个redis集群的数据同步。 1、redis节点操作 ### 查看redis版本 ./bin/redis-server --version### 登录redis ./bin/redis-cli -…

改变Ubuntu的Tab没有缩进4格(Makefile)

1.vim里的Tab 用vi指令打开这个文件&#xff0c;没有的话就新创建一个 vi ~/.vimrc在打开的文件中输入以下两行 1 set tabstop42 set shiftwidth4 ~ Esc &#xff1a; x&#xff0c;保存并退出即可 资料来源&#xff1a; 2024年5月21日-vi/vim …

Linux Ubuntu MySQL环境安装

1. 更新软件源 首先&#xff0c;确保你的Ubuntu系统已经更新了软件源列表&#xff0c;以便能够下载到最新的软件包。打开终端并输入以下命令&#xff1a; sudo apt update 2. 安装MySQL服务器 打开终端并输入以下命令来安装MySQL服务器 sudo apt install mysql-server 在…

一个便捷的web截图库~【送源码】

随着时间的发展&#xff0c;前端开发的范围越来越广&#xff0c;能够实现的功能也越来越多&#xff0c;要实现的功能也五花八门&#xff0c;今天就给大家介绍一个web截图库,让前端也能实现截图功能—— js-web-screen-shot js-web-screen-shot js-web-screen-shot 是一个基于 …

嵌入式板级支持包(BSP)80道面试题及参考答案(3万字长文)

目录 解释什么是通用输入输出(GPIO)接口及其在BSP中的作用。 描述SPI接口的主要特点和用途。 说明IC总线协议的工作原理。 如何在BSP中配置一个UART接口? USB设备控制器在BSP中的初始化步骤是什么? 以太网接口如何在BSP中被支持? 什么是SDIO,它在哪些场景下会被使…

语言模型演进:从NLP到LLM的跨越之旅

在人工智能的浩瀚宇宙中&#xff0c;自然语言处理&#xff08;NLP&#xff09;一直是一个充满挑战和机遇的领域。随着技术的发展&#xff0c;我们见证了从传统规则到统计机器学习&#xff0c;再到深度学习和预训练模型的演进。如今&#xff0c;我们站在了大型语言模型&#xff…

【接口设计】如何设计统一 RESTful 风格的数据接口

如何设计统一 RESTful 风格的数据接口 1.版本控制1.1 通过 URL1.2 通过自定义请求头1.3 通过 Accept 标头 2.过滤信息3.确定 HTTP 的方法4.确定 HTTP 的返回状态5.定义统一返回的格式 近年来&#xff0c;随着移动互联网的发展&#xff0c;各种类型的客户端层出不穷。如果不统一…

Mybatis-Plus最优化持久层开发

Mybatis-plus&#xff1a;最优化持久层开发 一&#xff1a;Mybatis-plus快速入门&#xff1a; 1.1&#xff1a;简介&#xff1a; Mybatis-plus&#xff08;简称MP&#xff09;是一个Mybatis的增强工具&#xff0c;在mybatis的基础上只做增强不做改变; 提高效率&#xff1b;自…

国漫推荐11

1.《元龙》 2.《恶魔法则》2023年9月29日 3.《三十六骑》 4.《山河剑心》 5.剑网3侠肝义胆沈剑心 《剑网3侠肝义胆沈剑心》 《剑网3侠肝义胆沈剑心 第二季》 《剑网3侠肝义胆沈剑心之长漂》&#xff08;番外&#xff09; 《剑网3侠肝义胆沈剑心 第三季》 6.《仙逆》东方玄幻…

Uniswap V2和Uniswap V3的区别

Uniswap V2和Uniswap V3是两个不同版本的去中心化交易协议&#xff0c;由Uniswap团队开发和维护。它们之间的主要区别包括以下几点&#xff1a; 资金池模型不同: Uniswap V2: 使用恒定乘积市场模型&#xff0c;也就是 x * y k。这意味着每个资金池中的资产的乘积保持不变&…

Transformer的模型的扩展与应用领域的拓展 - Transformer教程

在如今的人工智能领域&#xff0c;Transformer模型已经成为了众多研究和应用的焦点。从自然语言处理到计算机视觉&#xff0c;Transformer模型的扩展与应用领域的拓展带来了无数的可能性。今天&#xff0c;我们就来聊聊Transformer模型的扩展以及它在不同领域的广泛应用。 首先…

生产管理系统功能全拆解:哪些功能是企业真正需要的?

制造业的伙伴经常听到“生产管理”&#xff0c;但很多人可能只是模糊地知道它与工厂、生产线有关。那么&#xff0c;到底什么是生产管理呢&#xff1f;它的重要性又体现在哪里呢&#xff1f;接下来&#xff0c;我就以轻松的方式&#xff0c;带大家走进生产管理的世界&#xff0…

函数练习·二 基础题

# 【以下功能都使用函数封装】 # 提示: 涉及到要返回的题目,请使用return # 基础题 # 1.封装函数&#xff0c;计算从1到某个数以内所有奇数的和并返回 def fn1(n): return sum([i for i in range(1, n, 2)]) print(fn1(7)) # 2.封装函数&#xff0c;判断某个数是否是偶…

微信闪退怎么回事?实用技巧助你轻松应对

在使用微信的过程中&#xff0c;偶尔会遇到闪退的问题&#xff0c;这不仅影响我们的日常沟通&#xff0c;还可能导致重要信息的丢失。那么&#xff0c;微信闪退怎么回事呢&#xff1f;闪退的原因可能有很多&#xff0c;包括软件问题、手机存储不足、系统不兼容等。本文将详细分…

笔记本电脑数据丢失如何恢复?

在计算机网络日益普及的今天&#xff0c;计算机已波及到人们的生活、工作、学习及消费等广泛领域&#xff0c;其服务和管理也涉及政府、工商、金融及用户等诸多方面。笔记本电脑等电子产品被各行各业的人所喜爱和接受&#xff0c;早已成为人们出差的必备品&#xff0c;可以用来…

keepalived高可用集群

一、keepalived&#xff1a; 1.keepalive是lvs集群中的高可用架构&#xff0c;只是针对调度器的高可用&#xff0c;基于vrrp来实现调度器的主和备&#xff0c;也就是高可用的HA架构&#xff1b;设置一台主调度器和一台备调度器&#xff0c;在主调度器正常工作的时候&#xff0…

OS_同步与互斥

2024-07-04&#xff1a;操作系统同步与互斥学习笔记 第9节 同步与互斥 9.1 同步互斥的基本概念9.1.1 同步关系9.1.2 互斥关系9.1.3 临界资源9.1.4 临界区9.1.5 同步机制应遵循规则 9.2 软件同步机制9.2.1 单标志法9.2.2 双标志先检查法9.2.3 双标志后检查法9.2.4 peterson算法 …

BP神经网络与反向传播算法在深度学习中的应用

BP神经网络与反向传播算法在深度学习中的应用 在神经网络的发展历史中&#xff0c;BP神经网络&#xff08;Backpropagation Neural Network&#xff09;占有重要地位。BP神经网络通过反向传播算法进行训练&#xff0c;这种算法在神经网络中引入了一种高效的学习方式。随着深度…

jstat命令介绍

jstat&#xff1a;查看JVM统计信息 一 基本情况二 基本语法2.1 option参数1. 类装载相关的&#xff1a;2. 垃圾回收相关的-gc&#xff1a;显示与GC相关的堆信息。包括Eden区、两个Survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息。-gccapacity&#xff1a;显示…

【C++】C++-机房收费管理系统(源码+注释)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…