当青训营遇上码上掘金之主题四-攒青豆
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;
当青训营遇上码上掘金之主题四-攒青豆相关推荐
- 前后端免费学 | 第六届字节跳动青训营报名啦
线上活动,全程免费 报名时间:2023年6月2日 - 2023年7月10日 报名地址:点我报名,暑假一起学技术呀... 前言 其实去年我就想参加青训营的,但是那时的我刚转完专业,觉得自己太菜了,单方面 ...
- 前后端免费学,字节跳动青训营-暑假专场报名启动
亲爱的小伙伴,你准备好了吗? 第六届字节跳动青训营,来咯! 无论你是初学者还是有一定经验 都可以在青训营找到属于自己的位置 全方位课程讲解 & 项目实践指导 让你轻松掌握「前端 or 后端」技 ...
- Go语言上手(一) | 青训营笔记
这是我参与「第三届青训营 -后端场」笔记创作活动的的第一篇笔记. 文章目录 语法速览 基础语法 第一:类型 第二:内置库部分 json库的使用 时间库的使用 字符串和数字互转 os相关信息 实战项目 ...
- HTML+CSS实现按钮手风琴效果 | 青训营笔记
HTML+CSS实现按钮手风琴效果 | 青训营笔记 需求描述 HTML部分 CSS部分 完整代码 效果展示 这是我参与「第四届青训营」笔记创作活动的的第7天. 需求描述 实现一排居中的五个图标,默认为 ...
- 字节青训营第三课之高质量编程与性能调优实战的笔记和总结
这是字节青训营第三课:高质量编程与性能调优实战的笔记和总结 概要 准备 尝试使用 test 命令,编写并运行简单测试 尝试使用 -bench参数,对函数进行性能测试 推荐阅读Go代码Review建议. ...
- 字节青训营抖音APP
You just work hard, the rest is up to time GitHub地址:https://github.com/xiaodainiao/TikTokLite TikTok ...
- EXPER LOG | 作为ByteDance青训营-客户端-项目leader的历程和收获
~此处为记录2022SUMMER青训营,我担任项目组长时,在团队协作,项目任务分配,规则商议协定以及收获心得 ~还在更新中 极简tiktok内容介绍: 榜单模块(主页面一) 榜单页面设计 历史数据查询 ...
- 字节青训营第一课之go语言入门的笔记和总结
有幸参加了字节跳动举办的青训营活动,主要是go语言的编程实践,我将会整理课程的笔记和总结,欢迎关注! 1Go语言简介 由于Go语言有语法简单.高性能等特点,因此国内外各大公司如谷歌.腾讯.字节等都在使 ...
- 字节跳动青训营笔试题解
文章目录 前言 一.单选题 二.多选题 三.编程题 T1.旋转数组最大值 题目 思路 代码 T2.社交圈 题目 思路 代码 四.简答题 题目 思路 前言 第五届字节跳动青训营-后端专场笔试题解,简单做 ...
最新文章
- 线性回归预测PM2.5值
- 贪心 ---- Codeforces Round #618 (Div. 2)B. Assigning to Classes+贪心[证明过程]
- 前端跨域问题的几种解决方案
- 数据结构之【数组和广义表】复习题
- 教师学计算机课程标准,信息技术课程标准2018
- 如何在ORACLE CLOUD中创建和访问容器集群丨内附官方文档链接
- Linux中shell变量作用域笔记
- 前端之sublime text配置
- 企业级生产环境CICD入门
- 通过shell脚本提交网站404死链
- QT连接MySQL记录
- Spark分区详解!DT大数据梦工厂王家林老师亲自讲解!
- nacos动态配置数据源_Sentinel使用Nacos存储规则及同步
- 第三方接口开发(短信验证码)
- 什么是负反馈电路?微分.积分电路?“自激”现象?
- 密码箱忘记密码解决方法
- 苹果手表Apple Watch 无法检查更新 iOS14.5 14.6 14.7
- 1567. 乘积为正数的最长子数组长度 ●●
- 编写自定义的字符串一致性匹配方法,只要两个字符串包含同样的字符, 不管字符的顺序如何,都认为两个字符串一致,如:”aabbcc”和”abcabc”被认为是一致的
- 洛谷 [P1638 逛画展] (尺取法)
热门文章
- 三个整数和与积中位数c语言,湖北省宜昌市枝江市届中考数学3月模拟试卷.pdf
- Error CodeSignatureDoesNotMatch/Code MessageThe request signature we calculated does not mat...
- C# FTP上传和下载文件操作
- 我忍不住发圈,所以只能屏蔽你
- VMware6.5 应用程序配制错误14001未能启动 解决办法
- java jndi ldap_JNDI 与 LDAP
- 【微信小程序】-- 使用 Git 管理项目(五十)
- 荣获“中国 AI 企业知识产权百强榜” 思岚科技再受肯定
- 【zabbix】docker安装zabbix-appliance、yum安装zabbix-agent
- WIN10日常使用小技巧(持续更新)