# LeetCode.42 接雨水(Trapping Rain Water)(JS)

## 二、我的答案

### 思路2

``````/**
* @param {number[]} height
* @return {number}
*/
var trap = function(height) {
function fillister (arr) {
let result = 0
let baseLine = arr[0] <= arr[arr.length - 1] ? arr[0] : arr[arr.length - 1]
let difference
for(let i = 0; i < arr.length; i++) {
difference = baseLine - arr[i]
difference > 0 ? result += difference : null
}
return result
}
let result = 0
let bigger, smaller, the_dot
for(let begin = 0; begin < height.length; begin++) {
bigger = (height[begin - 1] || 0) < height[begin]
smaller = (height[begin + 1] || 0) < height[begin]
if (smaller && bigger) {
if (the_dot !== undefined) {
result += fillister(height.slice(the_dot, begin + 1))
}
the_dot = begin
}
}
return result
};
``````

``````  function noNeedToCall (arr) {
let max = Math.max.apply(null, arr)
let maxIndex = arr.indexOf(max)
for(let i = 0, len = arr.length - 1; i < len; i++){
if(i < maxIndex) {
if(arr[i] > arr[i + 1]) return false
} else {
if(arr[i] < arr[i + 1]) return false
}
}
return true
}
``````

### 思路3

``````/**
* @param {number[]} height
* @return {number}
*/
var trap = function(height) {
const max = Math.max.apply(null, height)
const maxIndex = height.indexOf(max)
let i = 0, temp = 0, result = 0
for (i = 0; i < maxIndex; i++) {
if (height[i] >= temp) {
temp = height[i]
} else {
result += temp - height[i]
}
}
temp = 0
for (i = height.length - 1; i > maxIndex; i--) {
if (height[i] >= temp) {
temp = height[i]
} else {
result += temp - height[i]
}
}
return result
};
``````

## 三、优秀答案

``````/**
* @param {number[]} height
* @return {number}
*/
var trap = function(height) {
if (!height || !height.length) {
return 0;
}

let maxLeftWall = 0;
let maxRightWall = 0;

let water = 0;
let i = 0;
let j = height.length - 1;
while (i < j) {
if (height[i] < height[j]) {
if (height[i] >= maxLeftWall) {
maxLeftWall = height[i];
} else {
water += maxLeftWall - height[i];
}
i++;
} else {
if (height[j] >= maxRightWall) {
maxRightWall = height[j];
} else {
water += maxRightWall - height[j];
}
j--;
}
}

return water;
};
``````

## 四、路漫漫其修远兮

你不要过来啊！！！

jsdom 中文文档（纯翻译）
jsdom是一个纯粹由 javascript 实现的一系列 web标准，特别是 WHATWG 组织制定的DOM和 HTML 标准，用于在 nodejs 中使用。大体上来说，该项目的目标是模拟足够的Web浏览器子集，以便用于测试和挖掘真实世界...
2018-05-14

&lt;font face=&quot;寰�杞�闆呴粦, Arial, sans-serif &quot;&gt;2014骞达紝杞�浠惰�屼笟鍙戝睍杩呴€燂紝鍚勭�嶈��瑷€灞傚嚭涓嶇┓锛屼互婊¤冻鐢ㄦ埛涓嶆柇鍙樺寲鐨勯渶姹傘€傝繖浜涜��...
2015-11-12
three.js实现围绕某物体旋转

2017-02-17
JavaScript教程：JS中的原型
Keith Peters 几年前发表的一篇博文，关于学习没有“new”的世界，其中解释了使用原型继承代替构造函数。两者都是纯粹的原型编码。 标准方法（The Standard Way） 一直以来，我们学习的在 JavaScript 里创建对...
2015-11-12
JS中的语音合成——Speech Synthesis API
JS中的语音合成——Speech Synthesis API 简介 HTML5中和Web Speech相关的API实际上有两类，一类是“语音识别(Speech Recognition)”，另外一个就是“语音合成(Speech Synthes...
2018-05-17
NodeJS参考手册pdf版

2015-11-12
Node.js学习(1)----HTTP服务器与客户端
Node.js 标准库提供了 http 模块，其中封装了一个高效的 HTTP 服务器和一个简易的HTTP 客户端。http.Server 是一个基于事件的 HTTP 服务器，它的核心由 Node.js 下层 C++部分实现，而接口由 Jav...
2015-11-12

2017-03-25
Riot.js：不足1KB的MVP客户端框架
Riot.js是一款MVP（模型-视图-呈现）开源客户端框架，其最大的特点就是体积非常小，不足1KB，虽然体积小，但它可以帮助用户构建大规模的Web应用程序。 Riot.js是由Moot公司开发，目前最新版本为v0.9.2，遵循MIT开源许...
2016-03-11
javaScript+turn.js实现图书翻页效果实例代码

2017-03-16