代码随想三刷单调栈篇1

代码随想三刷单调栈篇1

  • 739. 每日温度
    • 题目
    • 代码
  • 496. 下一个更大元素 I
    • 题目
    • 代码
  • 503. 下一个更大元素 II
    • 题目
    • 代码
  • 42. 接雨水
    • 题目
    • 代码
  • 84. 柱状图中最大的矩形
    • 题目
    • 代码

739. 每日温度

题目

链接

代码

class Solution {public int[] dailyTemperatures(int[] temperatures) {int[] res = new int[temperatures.length];Deque<Integer> stack = new LinkedList();for(int i =0;i<temperatures.length;i++){if(stack.isEmpty()){stack.addLast(i);continue;}int tempIndex = stack.getLast();if(temperatures[i]<temperatures[tempIndex]){stack.addLast(i);continue;}while(!stack.isEmpty()&&temperatures[(tempIndex = stack.getLast())]<temperatures[i]){res[tempIndex] = i-tempIndex;stack.removeLast();}stack.addLast(i);}return res;}
}

496. 下一个更大元素 I

题目

链接

代码

class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {int[] arr = new int[nums1.length];Arrays.fill(arr,-1);Deque<Integer> stack = new LinkedList();for(int i =0;i<nums2.length;i++){if(stack.isEmpty()){stack.addLast(i);continue;}int tempIndex = stack.getLast();if(nums2[i]<nums2[tempIndex]){stack.addLast(i);continue;}while(!stack.isEmpty()&&nums2[(tempIndex = stack.getLast())]<nums2[i]){for(int j=0;j<nums1.length;j++){if(nums1[j]==nums2[tempIndex]){arr[j] = nums2[i];}}stack.removeLast();}stack.addLast(i);}return arr;}
}

503. 下一个更大元素 II

题目

链接

代码

class Solution {public int[] nextGreaterElements(int[] nums) {int[] result = new int[nums.length];Arrays.fill(result,-1);Deque<Integer> stack = new LinkedList();for(int i =0;i<nums.length*2;i++){int index = i%nums.length;if(stack.isEmpty()){stack.addLast(index);continue;}int tempIndex = stack.getLast();if(nums[index]<nums[tempIndex]){stack.addLast(index);continue;}while(!stack.isEmpty()&&nums[(tempIndex = stack.getLast())]<nums[index]){result[tempIndex] = result[tempIndex]==-1?nums[index]:result[tempIndex];stack.removeLast();}stack.addLast(index);}return result;}
}

42. 接雨水

题目

链接

代码

class Solution {public int trap(int[] height) {int size = height.length;if (size <= 2) return 0;// in the stack, we push the index of array// using height[] to access the real heightStack<Integer> stack = new Stack<Integer>();stack.push(0);int sum = 0;for (int index = 1; index < size; index++){int stackTop = stack.peek();if (height[index] < height[stackTop]){stack.push(index);}else if (height[index] == height[stackTop]){// 因为相等的相邻墙,左边一个是不可能存放雨水的,所以pop左边的index, push当前的indexstack.pop();stack.push(index);}else{//pop up all lower valueint heightAtIdx = height[index];while (!stack.isEmpty() && (heightAtIdx > height[stackTop])){int mid = stack.pop();if (!stack.isEmpty()){int left = stack.peek();int h = Math.min(height[left], height[index]) - height[mid];int w = index - left - 1;int hold = h * w;if (hold > 0) sum += hold;stackTop = stack.peek();}}stack.push(index);}}return sum;}
}

84. 柱状图中最大的矩形

题目

链接

代码

class Solution {public int largestRectangleArea(int[] heights) {Stack<Integer> st = new Stack<Integer>();// 数组扩容,在头和尾各加入一个元素int [] newHeights = new int[heights.length + 2];newHeights[0] = 0;newHeights[newHeights.length - 1] = 0;for (int index = 0; index < heights.length; index++){newHeights[index + 1] = heights[index];}heights = newHeights;st.push(0);int result = 0;// 第一个元素已经入栈,从下标1开始for (int i = 1; i < heights.length; i++) {// 注意heights[i] 是和heights[st.top()] 比较 ,st.top()是下标if (heights[i] > heights[st.peek()]) {st.push(i);} else if (heights[i] == heights[st.peek()]) {st.pop(); // 这个可以加,可以不加,效果一样,思路不同st.push(i);} else {while (heights[i] < heights[st.peek()]) { // 注意是whileint mid = st.peek();st.pop();int left = st.peek();int right = i;int w = right - left - 1;int h = heights[mid];result = Math.max(result, w * h);}st.push(i);}}return result;}
}

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

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

相关文章

python库识别图像中人物的个数

要在Python中识别图像中的人物数量&#xff0c;可以使用OpenCV库来进行图像处理和特征提取&#xff0c;然后使用深度学习模型&#xff08;如YOLO、SSD或Faster R-CNN&#xff09;来识别物体。以下是一个简化的例子&#xff0c;使用OpenCV和预训练的YOLO模型来识别图像中的物体数…

5G中的RedCap

5G中的RedCap&#xff1a;降低能力的重要性和实现方式 随着5G技术的推广和普及&#xff0c;设备和终端的多样化使得网络能力的管理变得更加复杂和关键。RedCap&#xff08;Reduced Capability&#xff09;作为一个重要的概念&#xff0c;旨在解决设备能力差异对网络服务和用户…

WSGI 服务器教程:`write` 方法解析

Python WSGI 服务器教程&#xff1a;write 方法解析 在本文中&#xff0c;我们将详细解析一个用于 WSGI 服务器的 write 方法。这个方法负责处理 HTTP 响应&#xff0c;包括设置响应头和发送响应数据。我们将逐行解释该方法的工作原理&#xff0c;并提供一些背景知识&#xff…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第十三章 Linux连接档

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

前台线程和后台线程(了解篇)

在多线程编程中&#xff0c;理解线程的不同类型对于编写高效、稳定的程序至关重要。特别地&#xff0c;前台线程&#xff08;Foreground Threads&#xff09;与后台线程&#xff08;Background Threads&#xff09;在行为上有着根本的区别&#xff0c;这些区别直接影响到程序的…

jdevelope安装

准备 1.jdk1.8&#xff08;已经安装不做记录&#xff09; 2.下载jdevelope安装包 3.安装包安装jdevelope开发工具 4.创建或导入项目 下载jdevelope安装包 官网下载地址&#xff1a;https://edelivery.oracle.com 安装包安装jdevelope开发工具 cmd管理员权限运行安装脚本…

【栈和队列OJ题】

栈和队列OJ题 文章目录 栈和队列OJ题1. 用队列实现栈2. 用栈实现队列3. 括号匹配问题4. 循环队列 1. 用队列实现栈 OJ链接&#xff1a;225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09; 好的&#xff0c;我们一起来看一下题目&#xff0c;题目是这样说的 思路&…

百日筑基第十七天-消息队列入门

百日筑基第十七天-消息队列入门 基础概念 什么是消息队列&#xff1f; MQ&#xff1a;Message Queue 存放消息的队列&#xff0c;消费消息时是按照顺序&#xff08;队列先进先出&#xff09;消费的。 参与消息传递的双方称为 生产者 和 消费者 &#xff0c;生产者负责发送…

2024年06月CCF-GESP编程能力等级认证C++编程三级真题解析

本文收录于专栏《C等级认证CCF-GESP真题解析》&#xff0c;专栏总目录&#xff1a;点这里。订阅后可阅读专栏内所有文章。 一、单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级&…

天润融通引领客服革新,AI大模型助力品牌服务升级

AI时代&#xff0c;消费零售品牌的客户服务应该怎么做&#xff1f; 如今消费者的关注点已经越来越复杂&#xff0c;一条毛巾&#xff0c;关注点就可以包括&#xff1a; 是否婴幼儿可用&#xff0c;是否儿童成人可用&#xff1b;是否可以直接接触皮肤&#xff1b;是否无甲醛、…

张量笔记(4):张量网络

张量分解通常是将高维张量分解成一系列较低维的张量&#xff0c;表示能力相对较低。而张量网络可以表示复杂的高维数据结构&#xff0c;通过连接多个张量形成网络结构&#xff0c;可以更灵活地表示和处理复杂的数据关系。本节主要介绍HT和TT网络。 2.5.1 HT分解——首先我们引入…

一篇文章解锁vue2

本文章对标vue2笔记内容&#xff0c;欢迎补充 文章目录 Vue介绍Vue2的生命周期生命周期钩子 使用vue/cli&#xff08;脚手架&#xff09;创建项目工程组件属性refpropsmixinplugins插件 数组更新检测&#xff08;会改变原数组&#xff09;添加/修改响应式布局vue内置指令自定义…

可道云teamOS,用个人标签和公共标签,文件分类更多样

在信息爆炸的时代&#xff0c;我们每天都在与海量的数据和信息打交道。如何在这些纷繁复杂的信息中快速找到我们需要的&#xff0c;成为了摆在我们面前的一大难题。 为大家介绍一下可道云teamOS个人标签和公共标签功能&#xff0c;让信息的整理与搜索变得简单高效。 一、个人…

WAN 和 LAN 分别是什么?

WAN&#xff08;Wide Area Network&#xff0c;广域网&#xff09;和LAN&#xff08;Local Area Network&#xff0c;局域网&#xff09;是两种不同类型的计算机网络&#xff0c;在覆盖范围、用途和技术实现上有所区别。 覆盖范围&#xff1a; LAN&#xff1a;通常覆盖一个较小…

怎么有效做性能测试?85%的测试不知道!

在质量角度而言&#xff0c;针对一个被测的对象&#xff0c;不仅仅需要考虑它功能层面的完整性&#xff0c;也需要非功能场景下系统的健壮性和稳定性。一个系统最核心的是它的稳定性、完整性、以及弹性的能力。能够在不可预知以及突发的情况下系统能够平稳有效的平滑过去&#…

Transformer的最新的研究论文与成果 - Transformer教程

近年来&#xff0c;Transformer模型在自然语言处理&#xff08;NLP&#xff09;领域取得了显著的进展。从其最初由Google提出的论文《Attention is All You Need》&#xff0c;到如今被广泛应用于各大NLP任务&#xff0c;Transformer无疑成为了机器学习中的明星架构。那么&…

微信小程序之使用上拉加载实现图片懒加载

在微信小程序中&#xff0c;有2个事件&#xff0c;相信大家都很熟悉 下拉重新加载 上拉加载更多 事件是这么个事件&#xff0c;至于事件触发后干嘛&#xff0c;那就看代码了 首先要在对应得地方xxxxpage.json打开这个 "onReachBottomDistance": 100至于这个值100还是…

小红薯做私域的9个重要步骤!

做私域如何找到安全、有效且高效的yin流方法&#xff01;&#xff01;应该是大家醉醉关心的问题了吧&#xff0c;有很多伙伴们要 么被jin言w规了&#xff0c;要么正在去往被xian流的路上… 1w个s域好友>10w粉丝的变现价值&#xff01; 今天就一次性给大家总结了&#xff1a;…

pom.xml中重要标签介绍

在 Maven 项目中&#xff0c;pom.xml 文件是项目对象模型&#xff08;POM&#xff09;的配置文件&#xff0c;它定义了项目的依赖关系、插件、构建配置等。以下是 pom.xml 文件中一些重要的标签及其作用&#xff1a; <modelVersion>&#xff1a; 定义 POM 模型的版本。当…

MySQL 面试相关问题

写在前面&#xff1a; 不喜勿喷&#xff0c;暴躁作者又不求你给钱【没办法&#xff0c;遇见的狗喷子太多了&#x1f436;】欢迎大家在评论区留言&#xff0c;指正文章中的信息错误有一些其他相关的问题&#xff0c;可以直接评论区留言&#xff0c;作者看到会及时更新到文章末尾…