代码随想录算法训练营第五十天| 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,一经查实,立即删除!

相关文章

改变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 是一个基于 …

语言模型演进:从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;各种类型的客户端层出不穷。如果不统一…

国漫推荐11

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

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

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

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

在使用微信的过程中&#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算法 …

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…

LeetCode之最长回文子串

1.题目链接 5. 最长回文子串 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/longest-palindromic-substring/description/ 2.题目解析 对于这道题目我们可以使用动态规划的思路来求解&#xff0c;具体思路是&#xff0c;对于一个长度大于2的子串&…

生成式信息检索(问答系统与信息检索的进步)

文章目录 什么是问答系统&#xff08;Question Answering Systems&#xff09;检索系统的演变经典检索系统“Term” 文档搜素的最小单位倒排索引词嵌入的出现预训练语言模型 用于问答的语言模型设计方案选择&#xff1a;封闭式与开放式问答系统对比方案A&#xff1a;封闭式生成…

【干货】一文带你看懂什么是渠道分销?如何管理渠道分销

在当今竞争激烈的市场环境中&#xff0c;企业想要扩大市场份额、提高产品或服务的可见度&#xff0c;有效的渠道分销策略是关键。 什么是渠道分销&#xff1f; 渠道分销&#xff0c;简而言之&#xff0c;是指企业利用中间商&#xff08;如经销商、代理商、零售商等&#xff0…

springboot解压文件流zip压缩包

springboot解压文件流zip压缩包 原始文件存储的地方&#xff1a; 需要在当前目录下解压该文件&#xff0c;如下图&#xff1a; 代码示例&#xff1a; private Result<String> getLocationGuideLayerName(YbYstbtqTaskResolveParam params, String fishnetLayerName)…

华为od100问持续分享-1

我是一名软件开发培训机构老师&#xff0c;我的学生已经有上百人通过了华为OD机试&#xff0c;学生们每次考完试&#xff0c;会把题目拿出来一起交流分享。 重要&#xff1a;2024年5月份开始&#xff0c;考的都是OD统一考试&#xff08;D卷&#xff09;&#xff0c;题库已经整…

入门PHP就来我这(高级)24 ~ Session判断用户登录

有胆量你就来跟着路老师卷起来&#xff01; -- 纯干货&#xff0c;技术知识分享 路老师给大家分享PHP语言的知识了&#xff0c;旨在想让大家入门PHP&#xff0c;并深入了解PHP语言。 上一篇我们介绍了Session管理部分的概念&#xff0c;本文通过session来改写一些用户登录&…

一致性Hash问题及解决方案

Hash算法的应用场景 请求的负载均衡 Nginx的ip_hash策略可以在客户端ip不发生变化的情况下&#xff0c;将其发出的请求始终路由到同一个目标服务器上&#xff0c;实现会话粘滞&#xff0c;避免处理session共享问题。 如果没有ip_hash策略&#xff0c;可以通过维护一张映射表的…