LeetCode-接雨水

Teloi 每日编程 LeetCode评论47阅读模式

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

LeetCode-接雨水

题目

  上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。

  输入: [0,1,0,2,1,0,1,3,2,1,2,1]

  输出: 6


解题

/*
 * @lc app=leetcode.cn id=42 lang=javascript
 *
 * [42] 接雨水
 *
 * https://leetcode-cn.com/problems/trapping-rain-water/description/
 *
 * algorithms
 * Hard (40.76%)
 * Total Accepted:    8.1K
 * Total Submissions: 19.9K
 * Testcase Example:  '[0,1,0,2,1,0,1,3,2,1,2,1]'
 *
 * 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
 * 
 * 
 * 
 * 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢
 * Marcos 贡献此图。
 * 
 * 示例:
 * 
 * 输入: [0,1,0,2,1,0,1,3,2,1,2,1]
 * 输出: 6
 * 
 */
/**
 * @param {number[]} height
 * @return {number}
 */
var trap = function (height) {
  const width = height.length;
  let max = min = height[0];
  for (let num = 0; num < width; num++) {
    if (height[num] > max) {
      max = height[num];
    };
    if (height[num] < min) {
      min = height[num];
    }
  }

  let area = 0;
  let arr = [];
  for (let minN = min; minN < max; minN++) {
    arr = [];
    for (let i = 0; i < width; i++) {
      if (height[i] >= minN + 1) {
        arr.push(i);
      }
    }
    for (let arri = 0; arri < arr.length - 1; arri++) {
      if (arr[arri + 1] - arr[arri] > 1) {
        area += ((arr[arri + 1] - arr[arri]) - 1);
      }
    }
  }

  return area;
};

我只是记录生活,欢迎来到我的博客! 如需转载,请咨询作者同意后,标明作者以及出处,谢谢!
Teloi
  • 本文由 发表于 2020年2月7日 15:04:00
  • 转载请务必保留本文链接:https://blog.teloi.cn/2020/02/07/leetcode-%e6%8e%a5%e9%9b%a8%e6%b0%b4/
评论  0  访客  0
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: