theme: juejin

攒青豆

现有 n 个宽度为 1 的柱子,给出 n 个非负整数依次表示柱子的高度,排列后如下图所示,此时均匀从上空向下撒青豆,计算按此排列的柱子能接住多少青豆。(不考虑边角堆积)

以下为上图例子的解析: 输入:height = [5,0,2,1,4,0,1,0,3] 输出:17

解析:上面是由数组 [5,0,2,1,4,0,1,0,3] 表示的柱子高度,在这种情况下,可以接 17 个单位的青豆。

题解

这个和接雨水的题很相似
采用单调栈的做法

  • 先遍历每个的高度 前三个入栈 栈里面存的都是新来元素的下标 然后栈顶元素小于新加入的元素 栈顶元素出栈
  • 如果说栈里面还有元素 那么咱们需要的面积就是 底乘高
    底:当前遍历到的i - 现在栈顶元素-1
    高:首先新来的元素与当前栈的元素取最小 得出h1 (其实是为了知道A和B 二者中的最小) 然后h1与第一步出栈的元素相减 得出H
    面积就是 底* H
  • 答案要累加起来 当栈顶元素大于新来的元素时 栈里面添加元素
    最后输出答案
class Solution {public int trap(int[] height) {int n = height.length ;Stack<Integer> s = new Stack<>();int res = 0 ;for(int i = 0 ; i < n ; i++){while(s.size() > 0 && height[s.peek()] <= height[i]){int t =  s.pop();if(s.size() > 0){int h = Math.min(height[s.peek()],height[i]);res += (i - s.peek() - 1 )* (h-height[t]) ;}}s.push(i);}return res ;}
}

还有一种类似做法 和上面做法大同小异

题解2

这里面是分成了两部分内容 对上面的内容进行了拆解
当栈顶元素小于新来的元素的时候 ( last指的是现在栈的栈顶元素)

  • 出栈 然后面积的高 为原来和现在的栈顶元素之差
  • 等height[stack.peek()] > height[i]后来的面积的高为新来元素和现在栈顶元素的
    Stack<Integer> stack = new Stack<>();int result = 0;for (int i = 0; i < height.length; i++) {int last = 0;//这里面指的是现在栈的栈顶元素while (stack.size() != 0 && height[stack.peek()] <= height[i]) {result += ((height[stack.peek()] - last) * (i - stack.peek() - 1));last = height[stack.peek()];//更新成现在栈顶元素stack.pop();}if (stack.size() != 0) {result += ((height[i] - last) * (i - stack.peek() - 1));}stack.push(i);}return result;

当青训营遇上码上掘金之主题四-攒青豆相关推荐

  1. 前后端免费学 | 第六届字节跳动青训营报名啦

    线上活动,全程免费 报名时间:2023年6月2日 - 2023年7月10日 报名地址:点我报名,暑假一起学技术呀... 前言 其实去年我就想参加青训营的,但是那时的我刚转完专业,觉得自己太菜了,单方面 ...

  2. 前后端免费学,字节跳动青训营-暑假专场报名启动

    亲爱的小伙伴,你准备好了吗? 第六届字节跳动青训营,来咯! 无论你是初学者还是有一定经验 都可以在青训营找到属于自己的位置 全方位课程讲解 & 项目实践指导 让你轻松掌握「前端 or 后端」技 ...

  3. Go语言上手(一) | 青训营笔记

    这是我参与「第三届青训营 -后端场」笔记创作活动的的第一篇笔记. 文章目录 语法速览 基础语法 第一:类型 第二:内置库部分 json库的使用 时间库的使用 字符串和数字互转 os相关信息 实战项目 ...

  4. HTML+CSS实现按钮手风琴效果 | 青训营笔记

    HTML+CSS实现按钮手风琴效果 | 青训营笔记 需求描述 HTML部分 CSS部分 完整代码 效果展示 这是我参与「第四届青训营」笔记创作活动的的第7天. 需求描述 实现一排居中的五个图标,默认为 ...

  5. 字节青训营第三课之高质量编程与性能调优实战的笔记和总结

    这是字节青训营第三课:高质量编程与性能调优实战的笔记和总结 概要 准备 尝试使用 test 命令,编写并运行简单测试 尝试使用 -bench参数,对函数进行性能测试 推荐阅读Go代码Review建议. ...

  6. 字节青训营抖音APP

    You just work hard, the rest is up to time GitHub地址:https://github.com/xiaodainiao/TikTokLite TikTok ...

  7. EXPER LOG | 作为ByteDance青训营-客户端-项目leader的历程和收获

    ~此处为记录2022SUMMER青训营,我担任项目组长时,在团队协作,项目任务分配,规则商议协定以及收获心得 ~还在更新中 极简tiktok内容介绍: 榜单模块(主页面一) 榜单页面设计 历史数据查询 ...

  8. 字节青训营第一课之go语言入门的笔记和总结

    有幸参加了字节跳动举办的青训营活动,主要是go语言的编程实践,我将会整理课程的笔记和总结,欢迎关注! 1Go语言简介 由于Go语言有语法简单.高性能等特点,因此国内外各大公司如谷歌.腾讯.字节等都在使 ...

  9. 字节跳动青训营笔试题解

    文章目录 前言 一.单选题 二.多选题 三.编程题 T1.旋转数组最大值 题目 思路 代码 T2.社交圈 题目 思路 代码 四.简答题 题目 思路 前言 第五届字节跳动青训营-后端专场笔试题解,简单做 ...

最新文章

  1. 线性回归预测PM2.5值
  2. 贪心 ---- Codeforces Round #618 (Div. 2)B. Assigning to Classes+贪心[证明过程]
  3. 前端跨域问题的几种解决方案
  4. 数据结构之【数组和广义表】复习题
  5. 教师学计算机课程标准,信息技术课程标准2018
  6. 如何在ORACLE CLOUD中创建和访问容器集群丨内附官方文档链接
  7. Linux中shell变量作用域笔记
  8. 前端之sublime text配置
  9. 企业级生产环境CICD入门
  10. 通过shell脚本提交网站404死链
  11. QT连接MySQL记录
  12. Spark分区详解!DT大数据梦工厂王家林老师亲自讲解!
  13. nacos动态配置数据源_Sentinel使用Nacos存储规则及同步
  14. 第三方接口开发(短信验证码)
  15. 什么是负反馈电路?微分.积分电路?“自激”现象?
  16. 密码箱忘记密码解决方法
  17. 苹果手表Apple Watch 无法检查更新 iOS14.5 14.6 14.7
  18. 1567. 乘积为正数的最长子数组长度 ●●
  19. 编写自定义的字符串一致性匹配方法,只要两个字符串包含同样的字符, 不管字符的顺序如何,都认为两个字符串一致,如:”aabbcc”和”abcabc”被认为是一致的
  20. 洛谷 [P1638 逛画展] (尺取法)

热门文章

  1. 三个整数和与积中位数c语言,湖北省宜昌市枝江市届中考数学3月模拟试卷.pdf
  2. Error CodeSignatureDoesNotMatch/Code MessageThe request signature we calculated does not mat...
  3. C# FTP上传和下载文件操作
  4. 我忍不住发圈,所以只能屏蔽你
  5. VMware6.5 应用程序配制错误14001未能启动 解决办法
  6. java jndi ldap_JNDI 与 LDAP
  7. 【微信小程序】-- 使用 Git 管理项目(五十)
  8. 荣获“中国 AI 企业知识产权百强榜” 思岚科技再受肯定
  9. 【zabbix】docker安装zabbix-appliance、yum安装zabbix-agent
  10. WIN10日常使用小技巧(持续更新)