在这个图片里我们有不同高度的墙。这个图片由一个整数数组所代表,数组中每个数是墙的高度。上边的图可以表示为数组[2,5,1,2,3,4,7,7,6]。
假如开始下雨了,那么墙之间的水坑能够装多少水呢?
请用java实现(任意数组求出结果)
一道关于数组的算法题目,请用java实现。
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
6条回答 默认 最新
- Lizo_Is_Me 2014-12-30 10:26关注
虽然方法很笨,还不知道还有另外的bug,欢迎指出,共同进步
package lizo; /** * Created by Lizo on 2014/9/2. */ public class test { public static void main(String[] args) { int a[] = {2, 5, 1, 2, 3, 4, 7, 7, 6,3,4}; int len=a.length;//数组长度 int begin = 0; //从哪个地方才开始查找凹形 int capacity=0; //容积 while (begin<len){ //找出凹形的左边墙 int left=findLeft(begin,a,len); //如果返回值等于数组的长度,则退出循环 if(left==len){ break; } //找出凹形的右边墙 int right=findRight(left,a,len); //如果返回值等于数组的长度,则退出循环 if(right==len){ break; } //计算两个之间的容量 capacity+=findCapacity(left,right,a); //重新设置查找下一个凹形开始的位置 begin=right; } System.out.println(capacity); } private static int findLeft(int begin, int[] a, int len) { //查找左边墙的标准为,当前的墙的高度大于下一个墙的高度 for(int i=begin;i<len-1;i++){ if(a[i]>a[i+1]){ return i; } } return len; } private static int findRight(int left, int[] a, int len) { boolean findBottom=false; //判断是不是找到了凹形的点 int tempRight=0; //查找右边墙的标准为,当前墙的高度大于等于左边墙的高度 for(int i=left+2;i<len;i++){ if(!findBottom && a[i]>a[i-1]){ findBottom=true; tempRight=i; } if(!findBottom) continue; //找到了凹形的点之后才开始找右边的墙 else{ if(a[i]>=a[left]){ return i; } if(a[i]>a[tempRight]){ tempRight=i; } } } return tempRight>0?tempRight:len; } private static int findCapacity(int left, int right, int[] a) { //找出左右墙的较低的强 int min=Math.min(a[left],a[right]); int c=0; //计算凹形容积 for(int i=left+1;i<right;i++){ int tempc=min-a[i]; c+=(tempc>0)?tempc:0; } return c; } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥50 求解vmware的网络模式问题 别拿AI回答
- ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳
- ¥15 springboot 3.0 实现Security 6.x版本集成
- ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
- ¥30 请帮我解决一下下面六个代码
- ¥15 关于资源监视工具的e-care有知道的嘛
- ¥35 MIMO天线稀疏阵列排布问题
- ¥60 用visual studio编写程序,利用间接平差求解水准网
- ¥15 Llama如何调用shell或者Python
- ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?