阿里笔试题

 1     public static void main(String[] args) {
 2         char[] s ={'3', '2', '3', '^', '3','^', '1'};
 3         eatgold(s);
 4     }
 5 
 6     private static void eatgold(char[] value) {
 7     //    char[] value=value.toCharArray();
 8         int length=value.length;
 9         int count=0;
10         //计算二叉树的层数
11         while(length>0){
12             length-=Math.pow(2, count);
13             count++;
14             
15         }
16         for(int i=0;i<value.length;i++){
17             if(value[i] == '^'){
18                 value[i]= '0';
19                 
20             }    
21         }
22         ArrayList<Integer> list=new ArrayList<Integer>();
23         //计算二叉树每一层的和
24         for(int i=0;i<count;i++){
25             int index=0;
26             for(int j=(int) Math.pow(2, i)-1;j<Math.pow(2, i+1)-1&&j<value.length;j++){
27                 index += Integer.parseInt(value[j]+"");                
28             }
29             list.add(index);    
30         }
31         int sum=0;
32         for(int i=0;i<list.size();i++){
33             sum+=list.get(i);            
34         }
35         //两个端点的数,是去除里面第一个,或者最后倒数第二个,比较去掉最小的那个
36         int max=sum-Math.min(list.get(1), list.get(list.size()-2));
37         int maint=0;
38         //中间的几个相邻的去除,找出最大的
39         for(int i=1;i<list.size()-1;i++){
40             maint=sum-list.get(i-1)-list.get(i+1);
41             if(max<maint){
42                 max=maint;
43             }            
44         }
45         System.out.println(max);    
46     }

 

转载于:https://www.cnblogs.com/sunli0205/p/6773029.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值