【Day62】代码随想录之单调栈_739. 每日温度_496.下一个更大元素 I

文章目录

      • 1. 739. 每日温度
      • 2. 496.下一个更大元素 I

1. 739. 每日温度

参考文档:代码随想录

分析:
找下一个更高温度出现在几天后,即当前位置右侧出现的一个比它更大的值,如果是暴力搜索,两层for,时间复杂度O(n2), 数据范围105,时间最大是1010,这可能会超,我试了试,确实超了,用一个很大的全都一样的数组就超了。

单调栈是栈里是数组的下标,下标对应的数组元素是有序的。这里使用从栈顶到栈底递增的方法:这样遇到比栈顶更大的就可以根据下标求出距离了。遇到的元素和栈顶的元素会有三种情况:
栈顶元素大于遍历元素:入栈保留。
栈顶元素等于遍历元素:入栈保留。
栈顶元素小于遍历元素:弹出栈顶,下标相减再减一求出距离。根据栈里的单调,当前遍历元素和栈顶一直抵消,直到栈顶元素大于遍历元素。

代码:

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {vector<int> answer(temperatures.size(), 0);stack<int> st;//递增栈,存放的是下标st.push(0);for(int i = 1; i < temperatures.size(); i++){if(temperatures[i] < temperatures[st.top()]){//小于栈顶st.push(i);}else if(temperatures[i] == temperatures[st.top()]){st.push(i);}else{while(!st.empty() && temperatures[i] > temperatures[st.top()]){answer[st.top()] = i - st.top();st.pop();}st.push(i);}        }if(!st.empty()){answer[st.top()] = 0;st.pop();}return answer;}
};

2. 496.下一个更大元素 I

参考文档:代码随想录

分析:
和温度一样要找出右侧第一个比当前元素大的值,但是在找的时候需要查询当前元素在nums1中在不在,在的话保存值,而不是距离。因为用到查询是不是在nums1中存在,unordered_map<int, int>哈希表的底层逻辑查找效率是O(1),保存nums1中的数组下标和数组元素。

代码:

class Solution {
public:vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {stack<int> st;vector<int> answer(nums1.size(), -1);if(nums1.size() == 0) return answer;unordered_map<int, int> umap;for(int i = 0; i < nums1.size(); i++){umap[nums1[i]] = i;//保存值和下标,下标用来更新result}st.push(0);for(int i = 1; i < nums2.size(); i++){if(nums2[i] < nums2[st.top()]){st.push(i);}else if(nums2[i] == nums2[st.top()]){st.push(i);}else{while(!st.empty() && nums2[i] > nums2[st.top()]){if(umap.count(nums2[st.top()]) > 0) answer[umap[nums2[st.top()]]] = nums2[i];st.pop();}st.push(i);}}return answer;}
};

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

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

相关文章

基于JAVA的毕业设计分配选题系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 专业档案模块2.2 学生选题模块2.3 教师放题模块2.4 选题审核模块 三、系统展示四、核心代码4.1 查询专业4.2 新增专业4.3 选择课题4.4 取消选择课题4.5 审核课题 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpri…

vmware虚拟机centos中/dev/cl_server8/root 空间不够

在使用vmware时发现自己的虚拟机的/dev/cl_server8/root空间不够了&#xff0c;没办法安装新的服务。所以查了一下改空间的办法。 1.在虚拟机关闭的状态下&#xff0c;选中需要扩容的虚拟机->设置->硬件-> 硬盘->扩展->填写扩大到的值。 2.打开虚拟机&#xff…

jxls——自定义命令设置动态行高

文章目录 前言依赖引入绘制 jxls 批注的 excel 模板测试类编写自定义命令关于自动换行 前言 之前的博客中都简单说了数据的渲染和导出excel文件。包括固定的 表头结构&#xff0c;以及动态 表头和表数据等方式。 本篇博客主要说明自定义命令的方式&#xff0c;控制输出excel文…

Unity AssetBundle详解,加载本地包、加载网络包代码全分享

在Unity中,AssetBundle(简称AB包)是一种将多个文件或资源打包到一个文件中的方式,用于优化资源的加载和管理。使用AB包,可以按需加载资源,减少应用的初始加载时间,并可以实现热更新等功能。下面是一个基本的流程,展示如何在Unity中加载AB包并显示其中的资源。 步骤1:…

springboot 实现本地文件存储

springboot 实现本地文件存储 实现过程 上传文件保存文件&#xff08;本地磁盘&#xff09;返回文件HTTP访问服务器路径给前端&#xff0c;进行效果展示 存储 服务端接收上传的目的是提供文件的访问服务&#xff0c;对于SpringBoot而言&#xff0c;其对静态资源访问提供了很…

H3C防火墙安全授权导入

一、防火墙授权概述 前面我们已经了解了一些防火墙的基本概念&#xff0c;有讲过防火墙除了一些基本功能&#xff0c;还有一些高级安全防护&#xff0c;但是这些功能需要另外独立授权&#xff0c;不影响基本使用。这里以H3C防火墙为例进行大概了解下。 正常情况下&#xff0c;防…

深度学习_15_过拟合欠拟合

过拟合和欠拟合 过拟合和欠拟合是训练模型中常会发生的事&#xff0c;如所要识别手势过于复杂&#xff0c;如五角星手势&#xff0c;那就需要更改高级更复杂的模型去训练&#xff0c;若用比较简单模型去训练&#xff0c;就会导致模型未能抓住手势的全部特征&#xff0c;那简单…

[云原生] K8s之pod进阶

一、pod的状态说明 &#xff08;1&#xff09;Pod 一直处于Pending状态 Pending状态意味着Pod的YAML文件已经提交给Kubernetes&#xff0c;API对象已经被创建并保存在Etcd当中。但是&#xff0c;这个Pod里有些容器因为某种原因而不能被顺利创建。比如&#xff0c;调度不成功(…

原神抢码,米游社抢码-首发

本文章仅供学习使用-侵权请联系删除_2023年3月14日08:17:06 本来在深渊12层打不过的我偶然在刷到了一个dy的直播间&#xff0c;看到主播在抢码上号帮忙打深渊还号称痛苦号打不满不送原石的旗号我就决定扫码试试&#xff0c;在直播间内使用了两部手机互相扫码在扫了一下午的码后…

自动驾驶技术详解

&#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;自动驾驶技术 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质就是极致重复! 目录 一 自动驾驶视觉感知算法 1目标检测 1.1 两阶…

代码随想录算法训练营第四五天 | dp[j] = min(dp[j], dp[j - coins[i]] + 1)

目录 爬楼梯 &#xff08;进阶&#xff09;零钱兑换完全平方数总结 LeetCode 70. 爬楼梯 &#xff08;进阶&#xff09; LeetCode 322. 零钱兑换 LeetCode 279.完全平方数 爬楼梯 &#xff08;进阶&#xff09; 好做 import java.util.*;public class Main{// dp[i] 爬到有…

css背景图片属性

基础代码&#xff1a; div {width: 200px;height: 200px;background: url(./css-logo.png); }<div></div> 1、background-repeat&#xff1a;默认是repeat 设置背景图片在容器内是否平铺。 background-repeat: repeat-y; background-repeat: repeat-x; background…

消息中间件之RocketMQ源码分析(二十四)

事务消息 事务消息机制。 事务消息的发送和处理总结为四个过程: 1.生产者发送事务消息和执行本地事务 2.Broker存储事务消息 3.Broker回查事务消息 4.Broker提交或回滚事务消息 生产者发送事务消息和执行本地事务。 发送过程分为两个阶段: 第一阶段,发送事务消息 第二阶段,发…

Spring Expression Language (SpEL)

Spring 表达语言&#xff08;SpEL&#xff09;&#xff0c;支持在运行时查询和操作对象图&#xff0c;可以用于数据绑定、属性访问、方法调用等。使用SpEL可以简化代码并提高应用程序的可维护性。 1 概览 SpelExpressionParser是SpEL的一个核心组件&#xff0c;负责解析和编译…

CentOS安装编译Python3.11.6

CentOs自带python2版本太低&#xff0c;项目需要python3&#xff0c;于是自己安装python 操作指南&#xff1a; 重新下载源代码&#xff1a; # 删除旧的 Python 源代码文件&#xff08;如果有&#xff09; rm -rf Python-3.11.6.tar.xz # 下载 Python 3.11.6 的源代码文件 wget…

Java泛型简介

Java泛型简介 Java泛型是在Java 5中引入的一个特性&#xff0c;它允许程序员在编译时指定类、接口或方法能够接受的类型。泛型的主要目的是提供编译时类型安全检查&#xff0c;避免在运行时因为类型转换错误而导致的ClassCastException。 在没有泛型之前&#xff0c;Java中的集…

如何利用动态静态代理IP实现跨地域网络营销与市场研究

动态代理IP和静态代理IP都可以在跨地域网络营销与市场研究中发挥关键作用&#xff0c;具体实现方式如下&#xff1a; ### 动态代理IP的应用&#xff1a; 1. 跨地域营销活动测试&#xff1a; - 在进行网络营销时&#xff0c;尤其是要验证广告投放、SEO效果或A/B测试不同地区用户…

Ubuntu系统使用Docker搭建Jupyter Notebook并实现无公网ip远程连接

文章目录 1. 选择与拉取镜像2. 创建容器3. 访问Jupyter工作台4. 远程访问Jupyter工作台4.1 内网穿透工具安装4.2 创建远程连接公网地址4.3 使用固定二级子域名地址远程访问 本文主要介绍如何在Ubuntu系统中使用Docker本地部署Jupyter Notebook&#xff0c;并结合cpolar内网穿透…

C语言系列(所需基础:大学C语言及格)-4-转义字符/注释/选择语句

文章目录 一、转义字符二、注释三、选择语句 一、转义字符 加上\会讲原来的字符改变意思&#xff0c;即进行转义 例如\t会使t变成\t用于表示转义字符&#xff0c;使得t转义成水平制表符 其他转义字符&#xff1a; 三字母词&#xff08;展示\&#xff1f;的用处&#xff09;…

C#面:接口是一种引用类型,不可以声明公有的域或私有的成员变量,但是可以声明什么呢?

可以声明&#xff1a;方法&#xff0c;属性&#xff0c;索引器&#xff0c;事件。 接口的主要作用是定义一套规范&#xff0c;使得不同的类可以按照相同的规范进行交互。通过实现接口&#xff0c;类可以具备多态性&#xff0c;即可以以接口类型来引用对象&#xff0c;并调用接…