Twitter算法面试题详解(Java实现)——Trapping Rain Water

【算法题:求出高低不同的砖中能存多少水】

「Trapping Rain Water」

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.

解法思路:先找出数列中最左和最右的数值最大值,序列号为p、q(若最大值唯一则p、q相同),然后分三段计算存水量,具体代码如下:

 1 /*
 2  * 算法题:求高低不同的砖中能存多少水
 3  */
 4
 5 import java.util.ArrayList;
 6 import java.util.List;
 7
 8 public class FillWater {
 9
10     public static void main(String[] args) {
11
12         int num[] = { 0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1 };
13         List<Integer> stone = new ArrayList<Integer>();
14         for (int i = 0; i < num.length; i++) {
15             stone.add(num[i]);
16         }
17         int result = 0;
18         int p = 0, q = 0;// 找出左右最高点序号
19         for (int j = 0; j < stone.size(); j++) {
20             if (stone.get(j) > stone.get(p)) {
21                 p = j;
22                 q = j;
23             } else if (stone.get(j) == stone.get(p)) {
24                 q = j;
25             }
26             System.out.println("p: " + p + " , q: " + q);
27         }
28         result += calcL(stone.subList(0, p + 1)) + calcH(stone.subList(p, q + 1))
29                 + calcR(stone.subList(q, stone.size()));
30
31         System.out.println("result: " + result);
32     }
33
34     // 处理中段:p-q
35     static int calcH(List<Integer> a) {
36         int waterHigh = 0;
37         for (int i = 0; i < a.size(); i++) {
38             waterHigh += a.get(0) - a.get(i);
39         }
40         System.out.println("waterHigh: " + waterHigh);
41         return waterHigh;
42     }
43
44     // 处理左段:0-p
45     static int calcL(List<Integer> a) {
46         int waterLeft = 0;
47         for (int i = 1; i < a.size(); i++) {
48             if (a.get(i) < a.get(i - 1)) {
49                 waterLeft += a.get(i - 1) - a.get(i);
50                 a.set(i, a.get(i - 1));
51             }
52         }
53         System.out.println("waterLeft: " + waterLeft);
54         return waterLeft;
55     }
56
57     // 处理右段:q-end
58     static int calcR(List<Integer> a) {
59         int waterRight = 0;
60         for (int i = a.size() - 2; i > 0; i--) {
61             if (a.get(i) < a.get(i + 1)) {
62                 waterRight += a.get(i + 1) - a.get(i);
63                 a.set(i, a.get(i + 1));
64             }
65         }
66         System.out.println("waterRight: " + waterRight);
67         return waterRight;
68     }
69
70 }
时间: 2024-10-27 14:08:59

Twitter算法面试题详解(Java实现)——Trapping Rain Water的相关文章

LeetCode第[42]题(Java):Trapping Rain Water

题目:接雨水 难度:hard 题目内容: 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. The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In

不止面试02-JVM内存模型面试题详解

第一部分:面试题 本篇文章我们将尝试回答以下问题: 描述一下jvm的内存结构 描述一下jvm的内存模型 谈一下你对常量池的理解 什么情况下会发生栈内存溢出?和内存溢出有什么不同? String str = new String("abc")创建了多少个实例? 第二部分:深入原理 ok,开始.怎们还是先讲原理,再说答案.如果时间不足,也可以直接跳到最后看答案. 本次分享我们主要围绕jvm内存结构展开,这也是java面试必考知识点之一.所以我们先来看看jvm内存结构到底是啥样子. 1. j

Protocol Buffer技术详解(Java实例)

Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发团队中目前主要使用的开发语言就是C++.Java和Python,其中Python主要用于编写各种工具程序.然而为了保证该篇Blog的完整性和独立性,我仍然会将上一篇Blog中已经出现的内容再一次赘述,同时对于Java中特有的部分也会着重介绍.          一.生成目标语言代码.      下面

详解Java解析XML的四种方法

(1)DOM解析 DOM是html和xml的应用程序接口(API),以层次结构(类似于树型)来组织节点和信息片段,映射XML文档的结构,允许获取 和操作文档的任意部分,是W3C的官方标准 [优点] ①允许应用程序对数据和结构做出更改. ②访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据. [缺点] ①通常需要加载整个XML文档来构造层次结构,消耗资源大. [解析详解] ①构建Document对象: DocumentBuilderFactory dbf = DocumentBu

数据结构与算法面试题80道

由于这些题,实在太火了.所以,应广大网友建议要求,在此把之前已整理公布的前80题, 现在,一次性分享出来.此也算是前80题第一次集体亮相. 此些题,已有上万人,看到或见识到,若私自据为己有,必定为有知之人识破,付出代价. 所以,作者声明: 本人July对以上所有任何内容和资料享有版权,转载请注明作者本人July出处. 向你的厚道致敬.谢谢. ------------------------------------------------------------------------------

若干数据结构 && 算法面试题【四】(更新ing)

这是我的第三个面试题汇总. 想看之前的内容,请移步: http://zhweizhi.blog.51cto.com/10800691/1763237 ( 若干数据结构 && 算法面试题[一](更新完毕)) http://zhweizhi.blog.51cto.com/10800691/1775780 ( 若干数据结构 && 算法面试题[二](更新完毕)) http://zhweizhi.blog.51cto.com/10800691/1787562 ( 若干数据结构 &am

若干数据结构 && 算法面试题【三】(更新中)

这是我的第三个面试题汇总. 想看之前的内容,请移步: http://zhweizhi.blog.51cto.com/10800691/1763237 ( 若干数据结构 && 算法面试题[一](更新完毕)) http://zhweizhi.blog.51cto.com/10800691/1775780 ( 若干数据结构 && 算法面试题[二](更新完毕)) 另外,我的全部刷题代码都在这里: https://github.com/HonestFox/BrushQuestion

算法面试题

在上一篇博客中有原有提到分享一下面试题,最近也是才能新公司入职没多久,忙着熟悉环境,加上前不久出去玩了一趟(顺便写了篇游记,感兴趣的可以看一看).所以一直没时间整理博客,这段时间周末终于闲下来,就趁着周末就记录了几个面试过程中碰到的算法题. 本篇博客不打算介绍那些高逼格的算法(如winnow,bagging,ada boost等等),就讲讲最近在面试过程中遇到的算法题以及面试的时候给出的答案(出场率比较高的算法题我都列出来了,其他的就不说了).算法可以说是解决所有问题的基石.很多东西都可以转换为

详解java动态代理

生活中的代理: 比如一个明星成名了以后,是需要有一个代理的,因为太多人想找他签名,应付不来,那么这个时候代理的作用是拦截你对真正明星的访问,他可以拦截下来收点费用,再叫真正的明星过来为你签名. 程序中的代理: 1,要为已存在的多个具有相同接口的目标类的各个方法增加一些系统功能,例如,异常处理.日志.计算方法的运行时间.事务管理.等等,你准备如何做? 2,编写一个与目标类具有相同接口的代理类,代理类的每个方法调用目标类的相同方法,并在调用方法时加上系统功能的代码 下图显示了在程序中代理的调用原理(