随想录一刷Day59——单调栈
admin
2024-01-31 11:25:18
0

文章目录

  • Day59_单调栈
    • 3. 下一个更大元素 II
    • 4. 接雨水

Day59_单调栈

3. 下一个更大元素 II

503. 下一个更大元素 II
思路:

方法一:
将数组复制一份拼接在尾部,然后对整个新数组利用单调栈求结果,最后将结果resize成原数组的大小

class Solution {
public:vector nextGreaterElements(vector& nums) {int nums_size = nums.size();nums.insert(nums.end(), nums.begin(), nums.end()); // 两个数组拼接在一起nums_size *= 2;vector result(nums_size, -1);stack stk;stk.push(0);for (int i = 1; i < nums_size; i++) {while (!stk.empty() && nums[i] > nums[stk.top()]) {result[stk.top()] = nums[i];stk.pop();}stk.push(i);}result.resize(nums_size / 2);return result;}
};

方法二:
优化一下,把插入元素和resize操作去掉,模拟数组复制两份的情况

class Solution {
public:vector nextGreaterElements(vector& nums) {int nums_size = nums.size();vector result(nums_size, -1);stack stk;stk.push(0);for (int j = 1; j < nums_size * 2; j++) {int i = j % nums_size;while (!stk.empty() && nums[i] > nums[stk.top()]) {result[stk.top()] = nums[i];stk.pop();}stk.push(i);}return result;}
};

4. 接雨水

42. 接雨水
思路1:双指针

遍历整个数组,找到每个柱子左右最高的柱子来判断该列可以接到多少水,累计所有柱子可以接到的水量。(首尾柱子不接水)

超时了(>人<;)
时间复杂度: O(n2)O(n^2)O(n2)
空间复杂度: O(1)O(1)O(1)

class Solution {
public:int trap(vector& height) {int size = height.size();int sum = 0;for (int i = 1; i < size - 1; i++) {int left_height = height[i];int right_height = height[i];for (int j = i - 1; j >= 0; j--) left_height = max(left_height, height[j]);for (int j = i + 1; j < size; j++) right_height = max(right_height, height[j]);sum += min(left_height, right_height) - height[i];}return sum;}
};

思路2:动态规划

双指针多次重复计算去找每一列的左右边界,使用数组将左右边界的值记录下来,可以省去重复的查找,这里用到了动态规划的思想,递推公式如下:

  • 左边界: leftheight[i] = max(leftheight[i], leftheight[i - 1]);
  • 右边界:rightheight[i] = max(rightheight[i], rightheight[i - 1];

时间复杂度: O(n)O(n)O(n)
空间复杂度: O(n)O(n)O(n)

class Solution {
public:int trap(vector& height) {int size = height.size();int sum = 0;vector left_h(size, 0);vector right_h(size, 0);left_h[0] = height[0];for (int i = 1; i < size; i++) left_h[i] = max(left_h[i - 1], height[i]);right_h[size - 1] = height[size - 1];for (int i = size - 2; i >= 0; i--) right_h[i] = max(right_h[i + 1], height[i]);for (int i = 1; i < size - 1; i++) sum += max(0, min(left_h[i], right_h[i]) - height[i]);return sum;}
};

思路3:单调栈

按行计算
计算获取单调栈,每次出现比栈顶元素大的元素时,说明出现了凹槽,该凹槽内的储水量是,高度是左右边界最小值与栈顶元素的差,宽度是右边界-左边界-1

时间复杂度: O(n)O(n)O(n)
空间复杂度: O(n)O(n)O(n)

class Solution {
public:int trap(vector& height) {int size = height.size();int sum = 0;stack stk;stk.push(0);for (int i = 1; i < size; i++) {while (!stk.empty() && height[i] > height[stk.top()]) {int mid = height[stk.top()];stk.pop();if (!stk.empty()) { // 有左右边界则可以储水int h = min(height[i], height[stk.top()]) - mid;int w = i - stk.top() - 1;sum += h * w;} // 只有单个边界不能存水}stk.push(i);}return sum;}
};

相关内容

热门资讯

原创 继... 去年九月的那个深夜,白俄罗斯边境毫无征兆地熄火了,原本跑得飞快的中欧班列,在那一刻被人按下了暂停键。...
供应扰动再发酵,碳酸锂尾盘涨停... 经历了一次急速回调后,碳酸锂期货又杀了一个“回马枪”。 1月20日,碳酸锂期货主力合约在尾盘触及涨停...
原创 融... 2026年伊始,A股市场便以一派火热景象迎接投资者,市场热度在多个维度均有所体现,尤其以融资余额的迅...
财经老王丨140万亿元 跟咱老... 来源:甘肃网络广播电视台 2025年,中国经济总量突破140万亿元。这个数字跟咱们老百姓有啥关系呢?...
小红书奶茶养号秘诀——4288... 大家好,我是4288养号盒子,提供专业免费养号软件,不仅有抖音养号,还有小红薯养号等、还有短视频热门...
原创 干... 美国这些年总想在经济上给中国使绊子,从贸易战打到科技限制,可中国那边经济还是稳稳的往前拱。2018年...
纪念币纪念钞二手交易莫冲动 来源:经济日报 目前,二手市场高价接盘的风险很高。一方面,卖家无实物,且二手市场缺乏权威验货渠道,买...
“十年十亿”魔咒告破?全球巨头... 2026年开年,AI制药正以前所未有的速度冲击传统研发的“双十定律”——一款新药研发需要十年时间、耗...
红杉资本考虑参投Anthrop... 红杉资本正准备加入Coatue和新加坡主权财富基金GIC,参与人工智能初创公司Anthropic P...
大行回应!消费贷贴息政策升级,... 来源:第一财经 消费贷贴息政策迎来重要升级,落地细节备受关注。1月20日晚间,多家国有大行表态将积极...
民营经济发祥地温州GDP破万亿... 1月20日,温州市十四届人大六次会议召开,市长张文杰在作政府工作报告时透露:2025年该市地区生产总...
原创 俄... 编辑:G 2026年1月,俄罗斯主流媒体《生意人报》曝光了一则重磅消息,就像在全球商业圈扔了一颗深水...
一揽子政策公布!事关贷款贴息、... 今天(20日),财政部官网连续发布5个文件,涉及个人消费贷、民间投资等领域。 “延长、扩大、提高”成...
一个隐秘风口,微信成寡头了 出品|虎嗅黄青春频道 作者|商业消费主笔 黄青春 题图|视觉中国 当聒噪的短剧让人直呼上头时,一个更...
弃购芯片设计、锁定双盈利引擎,... 停牌14天后,盈方微(000670.SZ)于1月20日携重大资产重组预案复牌。预案显示,公司拟以发行...
布局运动医学领域 爱博医疗拟收... 《科创板日报》1月20日讯(记者 黄修眉)爱博医疗今日(1月20日)晚间公告称,与德美联合(重庆)医...
一个月内两度抛出并购计划,明德... 自去年底宣布收购武汉必凯尔救助用品有限公司(以下简称“必凯尔”)100%股权后,明德生物(00293...
重庆A股40家上涨 新大正、康... 1月20日,79家重庆A股上市公司中有40家上涨,3家平收,下跌36家。 同花顺iFinD数据显示,...
原创 广... 观点网汇悦台,作为广州顶豪的代名词,每一套房产的易主或被拍卖,都能勾起市场对财富起落的好奇。 近日,...
莱欧制药携手合作,助力罕见皮肤... 在现代医学的发展中,罕见皮肤病的治疗始终面临着巨大的挑战。这些疾病的发病率低,导致很多患者在寻求有效...