算法训练day63完结撒花单调栈739每日温度496下一个更大的元素503下一个更大的元素二

739每日温度

什么时候用单调栈

通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了

#include <iostream>
#include <vector>
#include <stack>class Solution {
public:std::vector<int> dailyTemperatures(std::vector<int>& temperatures) {std::vector<int> result(temperatures.size(), 0);std::stack<int> stk;if (!temperatures.empty()) {stk.push(0);}for (int i = 1; i < temperatures.size(); i++) {if (temperatures[i] <= temperatures[stk.top()]) stk.push(i);else {while (!stk.empty() && temperatures[i] > temperatures[stk.top()]) {result[stk.top()] = i - stk.top();stk.pop();}stk.push(i);}}return result;}
};int main() {Solution sol;std::vector<int> tem = {73,74,75,71,69,72,76,73};std::vector<int> res = sol.dailyTemperatures(tem);for (int i: res) {std::cout << i << " " ;}return 0;
}

单调栈里面的元素单调递增或单调递减

496下一个更大的元素

单调栈的本质是空间换时间。单调栈的作用就是存放遍历过的元素

递增就是求第一个比他大的元素的位置,递减就是求第一个比他小的元素的位置

将当前元素和栈口元素做比较 T[i] 和T[st.top()],再用一个result数组来记录reslult[st.top()]

#include <iostream>
#include <vector>
#include <unordered_map>
#include <stack>class Solution {
public:std::vector<int> nextGreaterElement(std::vector<int>& nums1, std::vector<int>& nums2) {std::unordered_map<int, int> umap;for (int i = 0; i < nums1.size();i ++) {umap[nums1[i]] = i;}std::vector<int> result(nums1.size(), -1);std::stack<int> stk;stk.push(0);for (int i = 1; i < nums2.size(); i++) {if (nums2[i] <= nums2[stk.top()]) {stk.push(i);}else {while (!stk.empty() && nums2[i] > nums2[stk.top()]) {if (umap.find(nums2[stk.top()]) != umap.end()) {result[umap[nums2[stk.top()]]] = nums2[i];}stk.pop();}stk.push(i);}}return result;}
};int main() {Solution sol;std::vector<int> nums1 = {2,4};std::vector<int> nums2 =  { 1,2,3,4};std::vector<int> res=  sol.nextGreaterElement(nums1, nums2);for (int i : res) {std::cout << i  << "," ;}return 0;}

503下一个更大的元素二

处理循环数组,可以不扩充nums,而是在遍历的过程中模拟走了两边nums。模拟遍历两边nums,注意一下都是用i % nums.size()来操作\

#include <iostream>
#include <vector>
#include <stack>class Solution {
public:std::vector<int> nextGreaterElements(std::vector<int>& nums) {std::stack<int> stk;std::vector<int> result(nums.size(), -1);stk.push(0);for (int i = 1 ; i < 2*nums.size(); i ++) {if (nums[i % nums.size()] <= nums[stk.top()]) {stk.push(i % nums.size());}else {while (!stk.empty() && nums[i % nums.size()] > nums[stk.top()]) {result[stk.top()] = nums[i % nums.size()];stk.pop();}stk.push(i % nums.size());}}return result;}
};int main() {Solution sol;std::vector<int> nums = {1,2,1};std::vector<int> res = sol.nextGreaterElements(nums);for (int i : res) {std::cout << i << " ";}return 0;
}

易错点为while (!stk.empty() && nums2[i] > nums2[stk.top()])容易忘记!stk.empty()

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

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

相关文章

基于SSM+Jsp+Mysql的网络视频播放器

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

使用 Python 的 LSTM 进行股市预测

目录 一、说明 二、为什么需要时间序列模型&#xff1f; 三、下载数据 3.1 从 Alphavantage 获取数据 3.1 从 Kaggle 获取数据 3.3 数据探索 3.4 数据可视化 四、将数据拆分为训练集和测试集 五、数据标准化 六、通过平均进行一步预测 6.1 标准平均值 6.2 指数移动平均线 6.3 如…

DSP笔记5-存储器映像与CMA文件

1.存储器映像&#xff08;Memory Map&#xff09;: 2.CMD命令&#xff0c;为数据分配地址和空间。 CMD文件中&#xff0c;PAGE 0 用于存代码 PAGE 1 用于存数据 SECTION 中存程序段 3.RAM&#xff0c;快速&#xff0c;断电即擦除 4.Flash&#xff0c;断电不擦除. 一般调试…

全光谱台灯哪个牌子好,2024全光谱护眼台灯推荐

近年来&#xff0c;全光谱台灯悄然跻身于家庭必备品之列&#xff0c;赢得了众多消费者的好评。它们以减轻眼睛疲劳的功效而受到推崇&#xff0c;尽管也有声音质疑其实际效用&#xff0c;认为所谓的益处不过是一种心理安慰。面对这些相互矛盾的观点&#xff0c;许多消费者感到困…

WebGIS实现各地区COVID-19数据一览

1.项目地址 GISpjd/WebGIS-Show-Covid19 (github.com)&#xff0c;具体每个文件的职能可以参考README文档。 2.前言 预览 >> 所用技术栈&#xff1a; 项目需求本身不是过于复杂&#xff0c;所以没有在相应前端框架下完成&#xff0c;但转入框架也是比较容易的 &#…

2024最新最简单的安卓底部菜单栏教程

2024最新最简单的安卓底部菜单栏教程 大界面跳转 public class MainActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);BottomNavigationView b…

Linux局域网IP扫描

sudo apt-get install arp-scan sudo arp-scan -I eth0 --localnet

01串的熵(蓝桥杯)

文章目录 01串的熵问题描述答案&#xff1a;11027421题意解释暴力枚举 01串的熵 问题描述 对于一个长度为n的01串 S x 1 x 2 x 3 x_{1}x_{2}x_{3} x1​x2​x3​… x n x_{n} xn​&#xff0c;香农信息熵的定义为 H(S) − ∑ 1 n p ( x i ) l o g 2 ( p ( x i ) ) -\sum _{1…

前端学习笔记:display(未完成)

这是本人学习的总结&#xff0c;主要学习资料如下 目录 1、一般属性2、flex系列2.1、flex容器的维度2.2、flex其他的关联属性 – 1、一般属性 display是css中的一个重要属性&#xff0c;它的值基本决定了元素的布局。这里就对它的值如何影响元素布局做一个总结。 display:bl…

STM32 H7系列学习笔记

必备的API知识 第 1 步&#xff1a;系统上电复位&#xff0c;进入启动文件 startup_stm32h743xx.s&#xff0c;在这个文件里面执行复位中断服务程序。 在复位中断服务程序里面执行函数 SystemInit&#xff0c;在system_stm32h7xx.c 里面。*之后是调用编译器封装好的函数&…

Socket 通信机制详解

Socket 是网络编程中一种重要的通信机制&#xff0c;它允许不同的计算机通过网络进行数据交换。 一、 Socket 的概念 Socket&#xff08;套接字&#xff09;是计算机网络编程中的一种抽象&#xff0c;它提供了在网络上进行通信的接口。 Socket 本质上是一种通信的端点&#…

Vue3 ts环境下的PropType

简介 在Typscript中&#xff0c;我们可以使用PropType进行类型的推断与验证。在日常的开发中我们常常会遇到下面这样的场景&#xff1a; 我们通过request请求从服务端获取了一条数据&#xff0c;数据是个Array的格式&#xff0c;Array中的每个元素又是一个对象&#xff0c;像下…

坚持十天做完Python入门编程100题第三天加班

坚持十天做完Python入门编程100题第三天加班 第24题 扫描文件列表第25题 如何将字典转换成JSON并写入json文件&#xff1f;第26题 JSON转换成字典 第24题 扫描文件列表 如何扫描当前目录下的文件列表&#xff1f;解析&#xff1a;可以使用python内置的glob模块&#xff0c;用法…

Golang | Leetcode Golang题解之第21题合并两个有序链表

题目&#xff1a; 题解&#xff1a; func mergeTwoLists(list1, list2 *ListNode) *ListNode {if list1 nil {return list2 // 注&#xff1a;如果都为空则返回空}if list2 nil {return list1}if list1.Val < list2.Val {list1.Next mergeTwoLists(list1.Next, list2)re…

项目管理工具——使用甘特图制定项目计划的详细步骤

甘特图是一种直观的项目管理工具&#xff0c;它有助于我们清晰地展示任务安排、时间管理和项目的进度。以下是使用甘特图制定项目计划的详细步骤&#xff1a; 1、创建项目&#xff1a;首先&#xff0c;在进度猫中创建新的项目&#xff0c;并设置项目的时间、工作日等参数。根据…

44-技术演进(下):软件架构和应用生命周期技术演进之路

应用、系统资源、应用生命周期管理这 3 个维度&#xff0c;构成了我们对云的所有诉求。 我会介绍下应用维度和应用生命周期管理维度的技术演进。 我们就先来看下软件架构的演进之路。 软件架构的演进 软件架构技术演进如下图所示&#xff1a; 单体架构 在单体架构中&#xff…

乐得瑞LDR6020 Type-C 一拖二/一拖三快充线方案介绍

随着移动设备的普及和功能的日益增强&#xff0c;电池续航成为了用户关注的重点之一。为了满足用户对于快速充电的需求&#xff0c;各大厂商纷纷推出了各种快充技术和产品。在这个背景下&#xff0c;乐得瑞公司推出了一款名为LDR6020的一分二PD快充线方案&#xff0c;该方案采用…

算法练习第四十九天|121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 买卖股票的最佳时机 class Solution {// public int maxProfit(int[] prices) {// int result 0;// for(int i 0;i<prices.length;i){// for(int j i1;j<prices.length;j){// result …

[蓝桥杯 2023 省 B] 冶炼金属(c++)

[蓝桥杯 2023 省 B] 冶炼金属 题目描述 小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X。这个炉子有一个称作转换率的属性 V V V&#xff0c; V V V 是一个正整数&#xff0c;这意味着消耗 V V V 个普通金属 O 恰好可以冶炼出一个特殊金属 X&#xff0c;当普…

Unity 九宫格

1. 把图片拖拽进资源文件夹 2.选中图片&#xff0c;然后设置图片 3.设置九宫格 4.使用图片&#xff0c;在界面上创建2个相同的Image,然后使用图片&#xff0c;修改Image Type 为Sliced