数字接水java实现

题目如下 :

    

这一题我是这么解决的,设置三个一维数组,第一个和第二个保存对应位置上的左边最高的数字和右边最高的数字,第三个保存对应位置的数字大小,保存之后第i个位置的蓄水量就是Max(min(dp1[i],dp2[i])-num[i],0),然后累加就可以了,代码如下 :

public class Six {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
      int[] dp1 = new int[6];
      int[] dp2 = new int[6];
      int[] num = new int[6];
      long result = 0;
      String temp = "";
      for(int i=10000;i<=999999;i++){
    	  temp = i+"";
    	  char[] item = temp.toCharArray();
    	  //-----------------------------------------------找到左右最高点并且赋值到相应的数组的相应位置
    	  for(int j=0;j<item.length;j++){
    		  char left='0',right='0';
    		  
    		  for(int k=j;k>=0;k--){
    			  if(item[k]>left){
    				  left = item[k];
    			  }
    		  }
    		  dp1[j] = Integer.parseInt(left+"");
    		  
    		  for(int k=j;k<item.length;k++){
    			  if(item[k]>right){
    				  right=item[k];
    			  }
    		  }
    		  dp2[j] = Integer.parseInt(right+"");
    		  num[j] =Integer.parseInt(item[j]+"");
    		  
    	  }
    	  //--------------------------------------------------把每个位置能放下的水量赋值到num数组中去
    	  for(int j=0;j<item.length;j++){
    		  int water = max(min(dp1[j],dp2[j])-num[j],0);
    		  result += water;
    	  }
      }
      System.out.print(result);
	}
	
	public static int max(int a,int b){
		if(a>b){
			return a;
		}else{
			return b;
		}
	}
	public static int min(int a,int b){
		if(a<b){
			return a;
		}else{
			return b;
		}
	}

}

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值