首页 > 试题广场 >

计算题

[编程题]计算题
  • 热度指数:2974 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
给定n个非负整数表示每个宽度为1的柱子的高度题,计算按此排列的柱子,下雨之后能接多少雨水。

输入描述:
逗号分隔的整数,表示每根柱子的高度。
柱子数n<=1000000,每根柱子的高度不大于100000


输出描述:
雨水量(高度和)
示例1

输入

0,1,0,2,1,0,1,3,2,1,2,1

输出

6
 
var str = readline();
var arr=str.split(',');
var num=trap(arr);
console.log(num)
    function trap (height) {
        let left = 0, right = height.length - 1
        let count = 0
        let leftMax = 0, rightMax = 0
        while (left <= right) {
            leftMax = Math.max(leftMax, height[left])
            rightMax = Math.max(rightMax, height[right])
            if (leftMax < rightMax) {
                count += leftMax - height[left]
                left++
            } else {
                count += rightMax - height[right]
                right--
            }
        }
        return count
        
    };

编辑于 2019-09-06 18:39:57 回复(0)