leetcode第42题接雨水

153 阅读1分钟

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

我的JavaScript解法

/**
 * @param {number[]} height
 * @return {number}
 */
var trap = function(height) {
  let result = 0;
  let left=0, right = height.length -1;
  let leftMax = 0, rightMax = 0;//左右两边最大高度
  while(left < right) {
  leftMax = Math.max(leftMax, height[left]);//左边最大值
  rightMax = Math.max(rightMax, height[right]);//右边最大值
  if (height[left] < height[right]) {
    result += leftMax - height[left];
    left++
  } else {
    result += rightMax - height[right];
    right--
  }
  }
  return result
};

**解析:**双指针解法

  • 时间复杂度:O(n)O(n)
  • 空间复杂度: O(1)O(1)