日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java wate_Trapping Rain Water leetcode java

發(fā)布時間:2024/9/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java wate_Trapping Rain Water leetcode java 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目:

Given n non-negative integers representing an elevation map where

the width of each bar is 1, compute how much water it is able to trap

after raining.

For example,

Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6.

The above elevation map is represented by

array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water

(blue section) are being trapped. Thanks Marcos for contributing this image!

題解:

參考:低調(diào)小一(http://blog.csdn.net/wzy_1988/article/details/17752809)的解題思路

“首先,碰到這樣的題目不要慌張,挨個分析每個A[i]能trapped water的容量,然后將所有的A[i]的trapped water容量相加即可

其次,對于每個A[i]能trapped

water的容量,取決于A[i]左右兩邊的高度(可延展)較小值與A[i]的差值,即volume[i] = [min(left[i],

right[i]) - A[i]] * 1,這里的1是寬度,如果the width of each bar is 2,那就要乘以2了”

那么如何求A[i]的左右高度呢? 要知道,能盛多少水主要看短板。那么對每個A[i]來說,要求一個最高的左短板,再求一個最高的右短板,這兩個直接最短的板子減去A[i]原有的值就是能成多少水了。

所以需要兩遍遍歷,一個從左到右,找最高的左短板;一個從右到左,找最高的右短板。最后記錄下盛水量的總值就是最終結(jié)果了。

代碼如下:

1??????public?int?trap(int[]?A)?{

2?????????if?(A?==?null?||?A.length?==?0)

3?????????????return?0;

4

5?????????int?i,?max,?total?=?0;

6?????????int?left[]?=?new?int[A.length];

7?????????int?right[]?=?new?int[A.length];

8

9?????????//from?left?to?right10?????????left[0]?=?A[0];

11?????????max?=?A[0];

12?????????for?(i?=?1;?i?

13?????????????left[i]?=?Math.max(max,?A[i]);

14?????????????max?=?Math.max(max,?A[i]);

15?????????}

16

17?????????//from?right?to?left18?????????right[A.length-1]?=?A[A.length-1];

19?????????max?=?A[A.length-1];

20?????????for?(i?=?A.length-2;?i?>=?0;?i--)?{

21?????????????right[i]?=?Math.max(max,?A[i]);

22?????????????max?=?Math.max(max,?A[i]);

23?????????}

24

25?????????//trapped?water?(when?i==0,?it?cannot?trapped?any?water)26?????????for?(i?=?1;?i?

27?????????????int?bit?=?Math.min(left[i],?right[i])?-?A[i];

28?????????????if?(bit?>?0)

29?????????????????total?+=?bit;

30?????????}

31

32?????????return?total;

33?????}

對照著代碼再看原來的例子:

index:? 0? 1? 2? 3? 4? 5? 6? 7? 8? 9? 10 11

A[index]:? 0? 1? 0? 2? 1? 0? 1? 3? 2? 1? 2? 1

left[index]: 0? 1? 1? 2? 2? 2? 2? 3? 3? 3? 3? 3

right[index]: 3? 3? 3? 3? 3? 3? 3? 3? 2? 2? 2? 1

min[i]: 0? 1? 1? 2? 2? 2? 2? 3? 2? 2? 2? 1

bit[i]: -? 0? 1? 0? 1? 2? 1? 0? 0? 1? 0? 0

那么根據(jù)上表可以算出最終結(jié)果是6。

Reference:http://blog.csdn.net/wzy_1988/article/details/17752809

總結(jié)

以上是生活随笔為你收集整理的java wate_Trapping Rain Water leetcode java的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。