代码随想录第六十一天 单调栈part01 739.每日温度 496.下一个更大元素 I 503.下一个更大元素II

关键点

使用条件:一维数组,想要寻找任一个元素的右边或者左边比第一个自己大或小的元素的位置;

原理:空间换时间,遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素;

维护单调栈:如果要找右边比自己大的,需要维护一个单调递增的单调栈; 比自己小的,则相反

739.每日温度  

题目链接: 力扣题目链接(opens new window)

这里为了提现三个条件,写的比较复杂

1) 如果当前遍历的温度比栈顶 元素小,则加入栈

2)如果等于,则加入栈

3)如果大于栈顶的元素,则弹出栈顶元素,然后可以计算出这个栈顶元素在多少个之后比它大的值,是当前元素坐标 - 栈顶元素,如果弹出后还有比栈顶元素大的,则继续计算

function dailyTemperatures(temperatures) {let result = new Array(temperatures.length).fill(0)let stack = []stack.push(0)for(let i = 1; i < temperatures.length; i = i + 1) {let top = stack[stack.length - 1]if(temperatures[i] < temperatures[top]) {stack.push(i)} else if(temperatures[i] === temperatures[top]) {stack.push(i)} else {while(stack.length && temperatures[i] > temperatures[stack[stack.length - 1]]) {top = stack.pop()result[top] = i - top}stack.push(i)}}return result
}

496.下一个更大元素 I

题目链接:. - 力扣(LeetCode)

思路分析:这里是得到:nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。

1)先用 map 和单调栈得到 num2中每个元素右边第一个比它大的元素

2)再用 num1去得到每个值对应的值

let reMap = {};let stack = [];let restul = [];for (let k = 0; k < nums2.length; k = k + 1) {reMap[nums2[k]] = -1;}stack.push(0);for (let i = 1; i < nums2.length; i = i + 1) {while (stack.length && nums2[i] > nums2[stack[stack.length - 1]] ) {let top = stack.pop();
// 弹出的元素对应的当前第一个比它大的元素reMap[nums2[top]] = nums2[i];}stack.push(i);}for (let j = 0; j < nums1.length; j = j + 1) {restul[j] = reMap[nums1[j]];}return restul;

503.下一个更大元素II  

题目链接: . - 力扣(LeetCode)

思路:把这个数组拼接成回转寿司的形式,然后去求相对应的弹出的 top 的数值,同样是利用单调栈的公式

var nextGreaterElements = function (nums) {const huizhuan = [...nums, ...nums];let result = new Array(nums.length).fill(-1),stack = [];stack.push(0);for (let i = 1; i < huizhuan.length; i = i + 1) {while (stack.length && huizhuan[i] > huizhuan[stack[stack.length - 1]]) {top = stack.pop();result[top] = huizhuan[i];}stack.push(i);}return result.slice(0, nums.length);
};

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

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

相关文章

【C++ Primer Plus学习记录】函数和数组

假设使用一个数组来记录家庭野餐中每人吃了多少个甜饼&#xff08;每个数组索引都对应一个人&#xff0c;元素值对于这个人所吃的甜饼数量&#xff09;。现在想知道总数。这很容易&#xff0c;只需要使用循环将所有数组元素累积起来即可。将数组元素累加是一项非常常见的任务&a…

皮下出血点

跟晒太阳的关键性很强&#xff0c;因为右手更严重&#xff0c;且右手手背正片红。 肝不好&#xff0c;手臂上有很多小红点&#xff0c;可能是毛细血管瘤&#xff0c;也可能是皮下出血点&#xff0c;表现形式不同&#xff0c;具体原因和处理措施不同。 1、毛细血管瘤&#xf…

机器人控制系列教程之并联机器人简介

背景 根据其构件的连接是否构成闭环形式&#xff0c;机器人可分为串联机器人和并联机器人两种。对于串联机器人&#xff0c;其所有的构件以串联的结构形式连接起来&#xff0c;在空间组成一种开环结构&#xff0c;因而具有工作空间大&#xff0c;灵活性好等优点&#xff0c;但…

【避雷实测】宠物空气净化器怎么选?希喂、小米、安德迈谁更值得入手!

不知道家里养猫的朋友们有没有注意到&#xff0c;每逢春夏季节&#xff0c;无论是户外还是室内&#xff0c;我们的鼻子常常感到痒痒的。户外的痒感往往是因为那些飘散的杨柳絮&#xff0c;而在室内&#xff0c;这种痒感很可能是由于猫主子的毛发飘浮在空气中所引起的。 为了能…

Qt:8.QWidget属性介绍(focuspolicy属性-控件焦点、stylesheet属性-为控件设置样式)

目录 一、focuspolicy属性-控件焦点&#xff1a; 1.1focuspolicy属性介绍&#xff1a; 1.2设置焦点策略——setFocusPolicy()&#xff1a; 1.3获取控件的焦点策略——focusPolicy()&#xff1a; 二、stylesheet属性——为控件设置样式&#xff1a; 2.1 stylesheet属性介绍…

Golang-map理解

golang-map语雀笔记整理 map的底层实现hmapbmap map是如何做到O(1)的复杂度的&#xff1f;map扩容策略 师兄问题回答 map的底层实现 hmap hmap的结构体核心字段有&#xff1a;buckets 桶数组地址&#xff0c; B 定位值&#xff0c;桶的数目是2^B个&#xff0c; count 当前map的…

黑马点评下订单-小程序下单没问题但是Postman发送请求失败了,返回401

经过多方探索&#xff0c;这个✓8错误就是由于黑马点评使用了拦截器&#xff0c;我们直接发送请求是会被拦截器拦截下来的&#xff0c;我给出的解决方案是通过配置Postman解决&#xff0c;方法很简单&#xff01; 解决方案 右边的value写上Redis里面登录所用token值就可以了…

使用zdppy_api+onlyoffice word文档在线共同编辑,附完整的vue3前端代码和python后端代码

参考文档&#xff1a; https://api.onlyoffice.com/zh/editors/basic https://api.onlyoffice.com/zh/editors/coedit 基本的架构思考&#xff1a; 文档表&#xff1a;记录的是文档信息 key&#xff1a;这个key可以标识唯一的一个文档&#xff0c;可以是文档的hash值fileType…

HttpServletResponse设置headers返回,发现headers中缺少“Content-Length“和“Content-Type“两个参数。

业务中需要将用httpUtils请求返回的headers全部返回&#xff0c;塞到HttpServletResponse中&#xff0c;代码如下&#xff1a; HttpServletResponse response;// 返回headers Arrays.stream(httpResponse.getHeaders()).forEach(header -> response.setHeader(header.getNa…

SM2加密的密文byte数组与ASN.1互转

ASN.1抽象语言标记(Abstract Syntax Notation One) ASN.1是一种 ISO/ITU-T 标准,描述了一种对数据进行表示、编码、传输和解码的数据格式,它提供了一整套正规的格式用于描述对象的结构。 一、该结构的应用场景 例如在做待签名的数字信封时,数字信封使用ASN.1封装,其中对…

MySQL的简介和安装目录

今日总结到此结束&#xff0c;拜拜&#xff01;

写代码,为什么还需要作图?

引言 古人云 &#xff1a;一图胜千言&#xff0c;闲人说&#xff1a;无图无真相。 在日常的聊天工具当中&#xff0c;无论是使用微信&#xff0c;还是钉钉。使用图片或表情包的频次越来越高&#xff0c;那是为什么呢&#xff1f;其实在互联网没有那么发达的时候&#xff0c;我…

QAnything接口文档

QAnything接口主要包括7个接口&#xff1a;新建知识库、查看知识库、删除知识库&#xff1b;上传文件、获取文件列表、删除文件&#xff1b;问答。 一.新建知识库&#xff08;POST&#xff09; 1.URL http://{your_host}:8777/api/local_doc_qa/new_knowledge_base2.请求参数…

【Linux】:命令行参数

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux命令行参数的相关知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入…

禹神electron学习~

最近时间比较富裕 咱们浅浅来学习下electron 视频在这禹神&#xff1a;一小时快速上手Electron&#xff0c;前端Electron开发教程_哔哩哔哩_bilibili 先看下流程模型 先决条件 首先第一步 查看你的node和npm版本 创建你的应用 创建一个文件夹 我创建的名称为my-electron-…

Transformer动画讲解 - 工作原理

Transformer模型在多模态数据处理中扮演着重要角色,其能够高效、准确地处理包含不同类型(如图像、文本、音频、视频等)的多模态数据。 Transformer工作原理四部曲:Embedding(向量化)、Attention(注意力机制)、MLPs(多层感知机)和Unembedding(模型输出)。 阶段一:…

机器人控制系列教程之任务空间运动控制器搭建(2)

Simulink中的实例 推文《机器人控制系列教程之任务空间运动控制器搭建(1)》中&#xff0c;我们详细的讲解了Simulink中的taskSpaceMotionModel模块&#xff0c;实现的方式可以按照如下的步骤。 可以控制器模型替换为taskSpaceMotionModel模块后&#xff0c;该模块的输入分别为…

git 命令之 stash 命令详解

Git Stash 命令详解 在 Git 版本控制系统中&#xff0c;git stash 命令是开发者们的一个强大工具&#xff0c;它允许开发者保存当前工作目录的修改&#xff0c;以便稍后能够重新应用这些修改。这在需要切换分支或处理紧急任务时非常有用&#xff0c;因为它可以帮助开发者保持工…

501、二叉搜索树中的众数

给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;。如果树中有不止一个众数&#xff0c;可以按 任意顺序 返回。 假定 BST 满足如下定义&#xff1…

周报 | 24.6.24-24.6.30文章汇总

为了更好地整理文章和发表接下来的文章&#xff0c;以后每周都汇总一份周报。 程序员学长 | 快速学会一个算法&#xff0c;Transformer&#xff08;下&#xff09;-CSDN博客 周报 | 24.6.17-24.6.23文章汇总-CSDN博客 python | NLTK&#xff0c;一个强大的 自然语言处理 Pyt…