当前位置: 首页 > article >正文

Day59 单调栈part02 503. 下一个更大元素 II 42. 接雨水

Day59 单调栈part02 503. 下一个更大元素 II 42. 接雨水

503. 下一个更大元素 II

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

42. 接雨水

暴力法

class Solution {
public:
    int trap(vector<int>& height) {
        int sum = 0;
        for (int i = 0; i < height.size(); i++) {
            int rHeight = height[i]; // 记录右边柱子的最高高度
            int lHeight = height[i]; // 记录左边柱子的最高高度
            for (int r = i + 1; r < height.size(); r++) {
                if (height[r] > rHeight) rHeight = height[r];
            }
            for (int l = i - 1; l >= 0; l--) {
                if (height[l] > lHeight) lHeight = height[l];
            }
            int h = min(lHeight, rHeight) - height[i];
            if (h > 0) sum += h;
        }
        return sum;
    }
};

单调栈

class Solution {
public:
    int trap(vector<int>& height) {
        int result =0;
        stack<int> stk;
        stk.push(0);

        for(int i = 1;i<height.size();i++){
            while(!stk.empty()&& height[i] > height[stk.top()]){
                int mid = stk.top();
                stk.pop();
                if(!stk.empty()){
                    int h = min(height[stk.top()],height[i]) - height[mid];
                    int w = i - stk.top() -1;
                    result += h*w;
                }
            }
            stk.push(i);
        }
        return result;
    }
};

http://www.kler.cn/a/228096.html

相关文章:

  • SpringCloud基础二(完结)
  • C++并发编程指南04
  • 神经网络|(五)概率论基础知识-条件概率
  • [A-29]ARMv8/v9-GIC-中断子系统的安全架构设计(Security/FIQ/IRQ)
  • GPU上没程序在跑但是显存被占用
  • 【Healpix】python一种用于将球面划分为均匀区域的技术
  • 基于tomcat的https(ssl)双向认证
  • 【Linux系统 01】Vim工具
  • 【2024年5月备考新增】《软考高项论文专题 (8)采购管理(合集)》
  • 机器学习本科课程 实验3 决策树处理分类任务
  • rust ethers-rs 签名与solidity验证签名例子
  • (深度学习快速入门)Graph Contrastive Learning with Augmentations(GraphCL)笔记
  • 租用海外服务器丢包是什么情况?
  • 3031. Minimum Time to Revert Word to Initial State II
  • 【Linux】 信号的保存 | 捕捉
  • list基本使用
  • 基于深度学习的SSVEP分类算法简介
  • 【Android】RxJava系列01-基本概述和基本用法
  • 【CSS + ElementUI】更改 el-carousel 指示器样式且隐藏左右箭头
  • Centos 7.5 安装 NVM 详细步骤
  • 基于ESP8266 开发板(MCU)遥控小车
  • PHP三级分类数据处理
  • eslint报错文档大量红色报错符号 不自动修正
  • ERP 系统架构的设计与实践总结
  • 课时14:变量基础_变量定义
  • 蓝桥杯第八届省赛题笔记------基于单片机的电子钟程序设计与调试