单调栈的应用,以及拆分思想

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

力扣上的一道题。

如果你想练习手写单调栈模版可以看看这篇文章单调栈模版-CSDN博客

当然这篇文章里我会使用STL里的stack。

试想一下,我们可以把题目中的数字具象化成一个个碗。

比如像这样

 

而21013这个大碗又可以分为两个小碗来计算

 

所以我们只需要找到它的底边和高即可。

维护一个单调递减的栈,当遇到stack.top()<a[i]时,每次取底边长cur=stack.top(),然后pop,然后再取l=stack.top(),ans=(std::min(a[i],a[l])-a[cur])*(i-l-1);这个式子可同时满足1.l=cur,此时ans+=0,2.l>cur,其中一个有效碗。

所以代码就是这样啦

class Solution {
public:
    int trap(vector<int>& height) {
        int ans = 0;
        stack<int> st;
        for (int i = 0; i < height.size(); i++)
        {
            while (!st.empty() && height[st.top()] < height[i])
            {
                int cur = st.top();
                st.pop();
                if (st.empty()) break;
                int l = st.top();
                int r = i;
                int h = min(height[r], height[l]) - height[cur];
                ans += (r - l - 1) * h;
            }
            st.push(i);
        }
        return ans;
    }
};

相关推荐

  1. Leetcode 139 单词

    2024-01-26 13:00:03       54 阅读
  2. leetcode 139. 单词

    2024-01-26 13:00:03       38 阅读
  3. LeetCode 139. 单词

    2024-01-26 13:00:03       37 阅读
  4. 力扣139. 单词

    2024-01-26 13:00:03       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-26 13:00:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-26 13:00:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-26 13:00:03       82 阅读
  4. Python语言-面向对象

    2024-01-26 13:00:03       91 阅读

热门阅读

  1. 流量控制+MSTP+堆叠+VRRP+BFD

    2024-01-26 13:00:03       56 阅读
  2. 使用ajax异步获取下拉列表的值

    2024-01-26 13:00:03       59 阅读
  3. OpenSSL library错误

    2024-01-26 13:00:03       44 阅读
  4. k8s从入门到实践

    2024-01-26 13:00:03       48 阅读
  5. 举例说明计算机视觉(CV)技术的优势和挑战

    2024-01-26 13:00:03       53 阅读
  6. ArrayList扩容机制

    2024-01-26 13:00:03       62 阅读
  7. retrofit基本模板

    2024-01-26 13:00:03       62 阅读
  8. 大寒节气:天童美语带你感受大寒的传统文化

    2024-01-26 13:00:03       54 阅读
  9. 367.有效的完全平方数(力扣LeetCode)

    2024-01-26 13:00:03       49 阅读
  10. 如何利用ChatGPT提升工作效率?

    2024-01-26 13:00:03       56 阅读
  11. THM学习笔记——SQL注入

    2024-01-26 13:00:03       40 阅读
  12. 深度解析数据库垂直与水平拆分:原则详解

    2024-01-26 13:00:03       40 阅读
  13. Mybatis之SqlSession详解

    2024-01-26 13:00:03       58 阅读
  14. 内网环境横向移动——如何防范

    2024-01-26 13:00:03       63 阅读