Twitter面试题之墙之间的水坑装雨水问题
来源:互联网 发布:ip网络座机怎样使用 编辑:程序博客网 时间:2024/04/29 20:46
“看下面这个图片”
“在这个图片里我们有不同高度的墙。这个图片由一个整数数组所代表,数组中每个数是墙的高度。上边的图可以表示为数组[2,5,1,2,3,4,7,7,6]”
“假如开始下雨了,那么墙之间的水坑能够装多少水呢?”
“以1×1的方块为单位计算容积。所以,在上边的图中下标为1以左的都会漏掉。下标7以右的也会漏掉。
package cn.baokx;public class Test0 {public static void main(String[] args) {int [] a1 = {2,5,1,2,3,4,7,7,6};int [] a2 = {2,5,1,3,1,2,1,7,7,6};int [] a3 = {6,1,4,6,7,5,1,6,4};System.out.println(getResult(a1));System.out.println(getResult(a2));System.out.println(getResult(a3));}public static int getResult(int [] a){if(a==null||a.length<3){return 0 ;}int result = 0 ;int array_max = getRightMax(a,0);int left_max = a[0] ;int right_max = getRightMax(a,2);//遍历下标为1至a.length-2的数组元素for(int i = 1 ; i < a.length - 1 ; i++){right_max = getRightMax(a,i+1);// 只有当前元素高度和左边最大值和右边最大值相比均小于的时候才可以装水if(a[i] < left_max && a[i] < right_max){result += array_max-Math.abs(left_max - right_max)-a[i];}left_max = a[i]>left_max?a[i]:left_max;}return result;}public static int getRightMax(int [] array,int index){int max = array[index];for(int i = index ; i < array.length ; i++){max = array[i]>max?array[i]:max;}return max;}}
另外一种方式,时间复杂度更小(---by tianshen0128)
package cn.baokx;public class Test11 {public static void main(String[] args) {int [] a1 = {2,5,1,2,3,4,7,7,6};int [] a2 = {2,5,1,3,1,2,1,7,7,6};int [] a3 = {6,1,4,6,7,5,1,6,4};System.out.println(getResult(a1));System.out.println(getResult(a2));System.out.println(getResult(a3));}public static int getResult(int [] array){int sum = getIntArraySum(array);//获得最大值,及坐标int max = 0;int max_index = 0;for (int i = 0; i < array.length; i++) {if(array[i]>max){max = array[i]; max_index = i;}}int left_max = 0;for (int i = 0; i <= max_index; i++) {if( array[i]<left_max){array[i]=left_max;}else{left_max=array[i];}}int right_max = 0;for (int i = array.length-1; i > max_index; i--) {if( array[i]<right_max){array[i]=right_max;}else{right_max=array[i];}}return getIntArraySum(array)-sum;}public static int getIntArraySum(int[] array){int result = 0;for (int i = 0; i < array.length; i++) {result+=array[i];}return result;}}
1 0
- Twitter面试题之墙之间的水坑装雨水问题
- [twitter] 墙之间的水坑能够装多少水
- 《我的twitter技术面试失败》中墙之间水坑装水问题的更烂解法(Java解)
- twitter面试题之装水问题
- 有趣的积水问题(Twitter编程面试题)
- java面试题之 城市之间路段的问题
- 求解twitter面试题(墙壁装水问题)
- 对一道Twitter面试题(墙面盛水问题)的解答
- 一道Twitter编程面试题
- 线程面试题之二:子线程之间的同步
- 面试题之求两个日期之间的天数差
- 面试题之获取start到end之间的随机数
- 【一道有趣的Twitter技术面试题】的个人思路
- 九章算法面试题80 接雨水
- 面试题分析:我的Twitter技术面试失败了
- 面试题分析:我的Twitter技术面试失败了
- 面试题分析:我的Twitter技术面试失败了
- 水池问题的lua语言算法(面试题分析:我的Twitter技术面试失败了)
- 挂靠挂靠挂靠挂靠
- 深入设计模式-5.原型模式
- 装饰模式
- Linux进程
- 详解SQL Server 2008数据备份与还原
- Twitter面试题之墙之间的水坑装雨水问题
- 有关打包后的工程文件中mapper.xml无法使用的问题
- oracle进行imp导入数据时报错:ORA-12592: TNS: 包错误
- 【数据结构之链队列的基本运算】
- 8、Preferences
- poj1753
- oracle全攻略——查询优化,DDL和DML操作
- CI中用JS弹出对话框并传值
- R语言时间序列分析