阿里笔试题

 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