算法刷题记录 Day52

算法刷题记录 Day52

Date: 2024.04.20

lc 84. 柱状图中最大的矩形

// 单调栈
class Solution {
public:int largestRectangleArea(vector<int>& heights) {// 对于每个柱子,我们考虑按当前柱子进行中心扩散,直到找到其左侧及其右侧,高度小于该柱子的柱子为止。// 例如当前柱子高度为2,则所有高度大于等于2的柱子都可以加入该柱子为高的矩形。// 因此,我们需要找到左侧和右侧第一个高度小于指定高度的柱子。(则范围内均为大于等于该高度的柱子)int n = heights.size();vector<int> leftIdx(n, 0);vector<int> rightIdx(n, 0);// 我们借助单调栈获取左右第一个高度小于指定高度的数。// 要获取左侧最近较小值,我们维护一个单调递增的栈。每当一个元素要入栈,我们舍去栈顶的大于该元素的值。// 若栈不为空,则此时的栈顶,即为该元素的左侧第一个更小值。若栈为空,则左侧第一个更小值视作0.stack<int> st;for(int i=0; i<n; i++){int cur_height = heights[i];if(!st.empty() && cur_height > heights[st.top()]){leftIdx[i] = st.top();}else if(!st.empty() && cur_height <= heights[st.top()]){while(!st.empty() && cur_height <= heights[st.top()]){st.pop();}if(st.empty()){leftIdx[i] = -1;}else{leftIdx[i] = st.top();}}else if(st.empty()){leftIdx[i] = -1;}st.push(i);}while(!st.empty()){st.pop();}for(int i=n-1; i>=0; i--){int cur_height = heights[i];if(!st.empty() && cur_height > heights[st.top()]){rightIdx[i] = st.top();}else if(!st.empty() && cur_height <= heights[st.top()]){while(!st.empty() && cur_height <= heights[st.top()]){st.pop();}if(st.empty()){rightIdx[i] = n;}else{rightIdx[i] = st.top();}}else if(st.empty()){rightIdx[i] = n;}st.push(i);}int max_area = -1;for(int i=0; i<n; i++){// cout<<"i:"<<i<<", leftIdx:"<<leftIdx[i]<<", rightIdx:"<<rightIdx[i]<<", (r-l-1):"<<(rightIdx[i] - leftIdx[i] - 2)<<", h:"<<heights[i]<<endl;int cur_area = (rightIdx[i] - leftIdx[i] - 1) * heights[i];max_area = max(max_area, cur_area);}return max_area;}
};// 暴力, ON^2, 超时
class Solution {
public:int largestRectangleArea(vector<int>& heights) {int max_area = INT_MIN;int n = heights.size();// 遍历起点和终点,矩形高为所有点中min,宽为(终点-起点+1);for(int start = 0; start < n; start++){int cur_min = heights[start];for(int end = start; end < n; end++){cur_min = min(cur_min, heights[end]);int cur_area = (end - start + 1) * cur_min;max_area = max(max_area, cur_area);}}return max_area;}
};

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

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

相关文章

Python 全栈安全(三)

原文&#xff1a;annas-archive.org/md5/712ab41a4ed6036d0e8214d788514d6b 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第十一章&#xff1a;OAuth 2 本章内容 注册 OAuth 客户端 请求对受保护资源的授权 授权而不暴露身份验证凭据 访问受保护的资源 OAuth …

人脑是怎么防止梯度消失和梯度爆炸的

人脑是怎么防止梯度消失和梯度爆炸的? 神经网络&#xff0c;也称为人工神经网络 (ANN) 或模拟神经网络 (SNN)&#xff0c;是机器学习的子集&#xff0c;并且是深度学习算法的核心。其名称和结构是受人类大脑的启发&#xff0c;模仿了生物神经元信号相互传递的方式。 感觉这个问…

亚马逊---设计安全架构

会从以下三个方面展开&#xff1a; 1、AWS资源访问安全 2、应用程序负载的网络安全 3、云中数据的安全 责任共担模式 就像租房子&#xff08;房东和你的责任&#xff09; AWS资源访问安全 需要掌握以下几点&#xff1a; 1、跨多个账户的访问控制和管理 2、AWS联合访问和身份服…

SpringMVC--RESTful

1. RESTful 1.1. RESTful简介 REST&#xff1a;Representational State Transfer&#xff0c;表现层资源状态转移。 RESTful是一种网络架构风格&#xff0c;它定义了如何通过网络进行数据的交互。这种风格基于HTTP协议&#xff0c;使得网络应用之间的通信变得更加简洁和高效。…

力扣283. 移动零

Problem: 283. 移动零 文章目录 题目描述思路复杂度Code 题目描述 思路 1.定义一个int类型变量index初始化为0&#xff1b; 2.遍历nums当当前的元素nums[i]不为0时使nums[i]赋值给nums[index]&#xff1b; 3.从index开始将nums中置对应位置的元素设为0&#xff1b; 复杂度 时间…

Java 异常处理详解

Java异常是Java编程语言中用于表示程序运行时错误的一种机制。Java异常体系通过异常类和异常处理来实现&#xff0c;允许程序在遇到预期或意外情况时&#xff0c;优雅地处理问题&#xff0c;而不是立即终止程序运行。 异常类层次结构 Java异常类都继承自java.lang.Throwable类…

【架构】负载均衡SLB浅谈

SLB负载均衡架构培训文档 1. 引言 作为一名架构师&#xff0c;理解并掌握SLB&#xff08;Server Load Balancer&#xff09;负载均衡架构是非常重要的。本培训文档旨在为您提供关于SLB负载均衡架构的详细知识和指导&#xff0c;帮助您更好地设计和优化企业级应用。 2. SLB负…

python爬虫--------requests案列(二十七天)

兄弟姐们&#xff0c;大家好哇&#xff01;我是喔的嘛呀。今天我们一起来学习requests案列。 一、requests____cookie登录古诗文网 1、首先想要模拟登录&#xff0c;就必须要获取登录表单数据 登录完之后点f12&#xff0c;然后点击network&#xff0c;最上面那个就是登录接口…

Spring AI Summary

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Spring AI is a project that aims to streamline the development of AI applications by providing abstractions and reusable components that can be easily integrate…

Java面试题:描述Java中的链式调用是如何实现的?

链式调用&#xff08;Chain of Responsibility&#xff09;是一种行为型设计模式&#xff0c;它允许你通过创建一个对象的序列来处理请求&#xff0c;每个对象处理请求后&#xff0c;将请求传递给下一个对象&#xff0c;直到请求被完整处理。这种模式通常用于简化对象之间的连接…

Python学习之旅高级篇一:Web开发之旅

在Python学习之旅高级篇中&#xff0c;我们将探索如何使用Python进行Web开发。Flask和Django是两个非常流行的Python Web框架&#xff0c;它们可以帮助你快速构建Web应用程序。此外&#xff0c;了解如何设计和实现RESTful API也是Web开发中的一个重要技能。接下来的文章里&…

【java、微服务】MQ

同步通讯 优点 时效性较强&#xff0c;可以立即得到结果 问题 微服务间基于Feign的调用就属于同步方式&#xff0c;存在一些问题。 耦合度高。每次加入新的需求&#xff0c;都要修改原来的代码资源浪费。调用链中的每个服务在等待响应过程中&#xff0c;不能释放请求占用的…

【华科网安复试】网络安全——技术与实践 刘建伟版 重点和笔记

网络安全——技术与实践 刘建伟版 重点和笔记 华中科技大学网络安全学院考研复试笔试部分&#xff1a;《网络安全——技术与实践》重点和笔记&#xff0c;全是图和表格总结的重点&#xff0c;方便复习 文章目录 网络安全——技术与实践 刘建伟版 重点和笔记一、第一章&#xff…

【软考---系统架构设计师】软件架构

目录 1 一、软件架构的概念 二、软件架构风格 &#xff08;1&#xff09;数据流风格​​​​​​​ &#xff08;2&#xff09;调用/返回风格 &#xff08;3&#xff09;独立构件风格 &#xff08;4&#xff09;虚拟机风格 &#xff08;5&#xff09;仓库风格 三、架构…

labview中循环停止事件的深入研究

1.错误用法 第一次值事件运行的时候空白按钮给的F值&#xff0c;第二次值事件运行的时候空白按钮给的T值&#xff0c;这时循环才真正结束。 2.正确用法之一 赋值和值改变事件从同时进行变成按顺序执行。 3.正确用法之二 值事件发生以后超时事件将T值赋值给结束条件&#xff…

linux tar解压缩命令

列出压缩文件内容 tar -tzvf test.tar.gz 解压文件 tar -xzvf test.tar.gz 压缩文件夹或文件&#xff1a; #压缩categraf目录下的所有文件&#xff0c;对应解压后的目录结构跟目录还是categraf/ tar -czvf categraf.tar categraf/ tar -czvf categraffile.tar categraffile.co…

Linux环境变量深度解析

文章目录 一、引言二、环境变量的基本概念1、环境变量的定义2、环境变量的作用与意义 三、环境变量的导入1、导入所需文件2、登陆时的导入 四、环境变量的设置方法1、查看环境变量的方式2、使用export命令临时设置环境变量3、修改配置文件以永久设置环境变量 五、命令行参数与环…

免费听音乐,下载音乐mp3,mp4,歌词的网站分享(2024-04-22)

亲测&#xff01;&#xff01;&#xff01; 1、音乐客 免费听和免费下载 经典老歌 - 音乐客音乐客,yinyueke.net,免费音乐,免费在线音乐播放器,免费下载音乐,音乐&#xff0c;播放器&#xff0c;下载&#xff0c;播放&#xff0c;DJ&#xff0c;免费,mp3,高音质&#xff0c;…

添加修改ubuntu中环境变量(PATH)

1.打开.bashrc文件进行设置&#xff0c;终端执行以下命令&#xff1a; sudo gedit ~/.bashrc2.在末尾行添加&#xff1a; export PATH$PATH:/xxx/xxx 其中&#xff0c;$PATH代表现存的环境变量&#xff0c;不能省去&#xff0c;等号两边一定不能有空格&#xff0c;/xxx/xxx要…

vLLM:由伯克利大学LMSYS组织开源的大语言模型高速推理框架-显著提高了大型语言模型(LLM)的服务效率

vLLM是一个由伯克利大学LMSYS组织开源的大语言模型高速推理框架,旨在提升实时场景下语言模型服务的吞吐与内存使用效率134。它是一个快速且易于使用的库,能够与HuggingFace无缝集成134。vLLM的核心是PagedAttention算法,这是一种新颖的注意力算法,通过引入操作系统的虚拟内…