攒青豆

62 阅读1分钟

当青训营遇上码上掘金 题目:现有 n 个宽度为 1 的柱子,给出 n 个非负整数依次表示柱子的高度,排列后如下图所示,此时均匀从上空向下撒青豆,计算按此排列的柱子能接住多少青豆。(不考虑边角堆积) 个人想法是创建数组s,注意第一个数字若为0则青豆无法落下输入序列,将序列从大到小排列放入二维数组c,c数组记录着s数组中青豆的索引和实际序列。 计算时按照c数组的索引进行计算,左边和右边之间的青豆数以小的数字为准。大的数字不攒青豆,左右之间的数字则用小的数字-其他数字得出攒青豆的量,然后一一相加。 以height = [5,0,2,1,4,0,1,0,3]为例 从大到小排列为543211000,则c数组为{{0,5},{4,4},{8,3},{2,2},{3,1},{6,1},{1,0},{5,0},{7,0}} 而后以0和4为左右边界,4小,青豆数为0+4+2+3+0=9 然后找到4剩余数字中最大的数字相比较,3小,青豆数为9+3+2+3+0=17 当然,这样还有许多问题没有考虑到,已经相加的数字如何