Trapping rain water
来源:互联网 发布:linux piwik 安装 编辑:程序博客网 时间:2024/05/18 14:42
题意:找出能够容纳的最大容积是多少
思路一:首先,定义两个数组left[]和right[],分别记录当前位置的左边和右边的最大高度;先从左至右遍历数组,找出当前位置的左边的最大高度,再从右至左遍历,找出当前位置右边的最大高度;最后遍历数组,能容纳的大小就是min(max_left[i],max_right[i])-height之和。
代码:package TrappingWater;
public class TrappingWater {
public int Trap(int []arr){ int []left = new int [arr.length]; int []right = new int[arr.length]; left[0] = arr[0]; int max = arr[0]; for(int i = 1 ; i <arr.length ; i++){ left[i] = Math.max(max,arr[i]); max = Math.max(max, arr[i]); } right[arr.length - 1] = arr[arr.length - 1]; max = arr[arr.length - 1]; for(int j = arr.length - 2 ; j >= 0 ; j--){ right[j] = Math.max(max,arr[j]); max = Math.max(max, arr[j]); } int total = 0; for (int k = 1 ; k < arr.length-1 ; k ++){ int sum = Math.min(left[k], right[k]) - arr[k]; total+=sum; } return total;}public static void main(String[] args) { TrappingWater tw = new TrappingWater(); long start = System.nanoTime(); int []array = {0,1,0,2,1,0,1,3,2,1,2,1}; int num = tw.Trap(array); long end = System.nanoTime(); System.out.println(num); System.err.println((end-start)/1000000);}
}
思路二:先找出序列中最大的数值,在分别从前往后遍历到这个最大的数值,从后往前遍历到最大的数值即可,但这个方法有一个bug,如果最大的数值不是唯一的话,得到的结果就不正确。
代码:package TrappingWater2;
import javax.rmi.CORBA.Tie;
import javax.swing.plaf.synth.SynthStyle;
public class TrappingWater2 {
public int Trap(int []arr){ int max = arr[0]; int total = 0; for(int i = 1 ; i < arr.length ; i++){ if(arr[i] > max) max = i; } int peak = arr[0]; for(int i = 1 ; i < max ;i++){ if(arr[i] > peak) peak = arr[i]; else total +=peak - arr[i]; } int top = arr[arr.length-1]; for(int j = arr.length -2 ; j > max ; j--){ if(arr[j] > top) top = arr[j]; else total += top-arr[j]; } return total;}public static void main(String[] args) {int []arrar = {2,1,0,5,1,2}; TrappingWater2 tw2 = new TrappingWater2();int temp = tw2.Trap(arrar);System.out.println(temp);}
}
0 0
- LeetCode: Trapping Rain Water
- LeetCode : Trapping Rain Water
- Trapping Rain Water
- [LeetCode] Trapping Rain Water
- [Leetcode] Trapping Rain Water
- [Leetcode] Trapping Rain Water
- Trapping Rain Water
- Trapping Rain Water
- [LeetCode]Trapping Rain Water
- Trapping Rain Water
- Trapping Rain Water
- LeetCode-Trapping Rain Water
- Trapping Rain Water
- [leetcode] Trapping Rain Water
- Trapping Rain Water
- [LeetCode] Trapping rain water
- Leetcode: Trapping Rain Water
- 38 - Trapping Rain Water
- WEB开发2--request&response
- Linux ELF文件
- python核心编程学习笔记-2016-10-01-01-客户端COM编程
- tcp
- 正则表达式
- Trapping rain water
- intellij idea 2016 注册码
- JVM指令集
- 利用.htaccess文件的 Rewrite 规则隐藏URL中的 index.php
- Struts2
- BZOJ 2330 查分约束
- 第一节:开发工具介绍及环境变量配置(讲师笔记篇)
- 编译链接的全过程
- 简单模拟支付宝转账系统