简答算法(代码部分和在编写代码时遇到的问题)不是最终版本还有一些错误需要纠正,现在还无法得出正确答案

编写测试代码,观看代码下的两幅图,发现不同之处:

public static void main(String[] args) {
		Map<Integer, Integer> map=new HashMap<>();
		
		Integer[] array= {63,2,3,95,25,1,6,5,6,6,8,8,8,9};
		Arrays.sort(array);
		for(int i=0;i<array.length;i++) {
			System.out.print(array[i]+"   ");
		}
		System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!");
		map.put(array[0], 1);
		for(int i=1;i<array.length;i++) {
			if(array[i-1]==array[i]) {
				map.put(array[i-1], map.get(array[i-1])+1);
			}else {
				map.put(array[i], 1);
			}
		}
		
		System.out.println(map);
	}

发现一个问题那就是在出现   个位和十位数相同时,map集合中没有按规律排序,------------我还没弄明白,我先把代码写好之后我去查查资料。

以下代码有一些错误需要纠正,无法得出正确答案,只能提供一些思路

  1 public class Demo_01 {
  2     
  3     static Integer[] array= {2,1,1,3};
  4     
  5     //运用map集合统计数组中每个数出现的次数
  6         public static Map<Integer, Integer> getMap(Integer[] array){
  7             Map<Integer, Integer> map=new HashMap<>();
  8             Arrays.sort(array);    
  9             map.put(array[0], 1);
 10             for(int i=1;i<array.length;i++) {
 11                 if(array[i-1]==array[i]) {                        //判断左右是否相等,若相等则对应值的次数加一
 12                     map.put(array[i-1], map.get(array[i-1])+1);
 13                 }else {                                            //否则将不同的数输入map集合中
 14                     map.put(array[i], 1);
 15                 }
 16             }
 17             return map;
 18         }
 19         
 20         //将不同的数存储在一个数组中   并且 按从小到大的顺序。
 21         public static Object[] getArrays(Integer[] array) {
 22             List<Integer> list=new ArrayList<>();
 23             Arrays.sort(array);    
 24             list.add(array[0]);
 25             for(int i=1;i<array.length;i++) {
 26                 if(array[i-1]==array[i]) {                        //判断左右是否相等,若相等则对应值的次数加一
 27                 }else {                                            
 28                     list.add(array[i]);    
 29                 }
 30             }
 31             Object[] A=list.toArray();
 32             return A;
 33         }
 34         //求两数之间的排列的次数
 35         public static int getNum(int i,int j) {                //i的数值小于j
 36             Map<Integer, Integer> map=getMap(array);
 37             Object[] A=getArrays(array);
 38             
 39             int num=1;
 40             for(int k=i;k<=j;k++) {
 41                 num=num*map.get(A[k]);
 42 //                System.out.println("num1="+num);
 43             }
 44 //            System.out.println("i="+i+"   j="+j);
 45 //            System.out.println(num);
 46 //            System.out.println(2^(j-i)*num/2);
 47             num=(int) ((j-i-1)==0?num:Math.pow(2, j-i-1));
 48             System.out.println("tula"+num+"nima");
 49             return num;
 50         }
 51         
 52         
 53         //得出最终值
 54         public static int getSum() {
 55             int sum=0;
 56             Object[] A=getArrays(array);
 57             for(int j=1;j<A.length;j++) {
 58                 for(int i=0;i<j;i++) {    //i的数值小于j
 59                     
 60                     sum=sum+getNum(i, j)*((int)A[j]-(int)A[i]);
 61                     //System.out.println("A[i]="+A[i]+"   i="+i+"  A[j]="+A[j]+"  j="+j+"  getNum="+getNum(i, j));
 62                 }
 63             }
 64             
 65             return sum;
 66             
 67         }
 68 
 69 //    public static Integer[] testname(Integer[] array) {
 70 ////        int[] A= {5,6,2,3,1,9,8,4};
 71 ////        Arrays.sort(A);
 72 //        Arrays.sort(array);
 73 //        for(int i=0;i<array.length;i++) {
 74 //            System.out.println(array[i]);
 75 //        }
 76 //        return array;
 77 //    }
 78 //    
 79 
 80     
 81 
 82     
 83     public static void main(String[] args) {
 84         
 85         
 86         System.out.println(getSum());
 87         
 88         
 89         
 90         
 91 //        
 92 //        
 93 //        Map<Integer, Integer> map=new HashMap<>();
 94 //        List<Integer> list=new ArrayList<>();                
 95 //        Integer[] array= {66,2,3,99,25,1,6,5,6,6,8,8,8,9};
 96 //        Arrays.sort(array);                                    //将数组中的数由小到大进行排序
 97 //        
 98 //        for(int i=0;i<array.length;i++) {
 99 //            System.out.print(array[i]+"   ");
100 //        }
101 //        System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!");//打桩检测数据是否排序
102 //        
103 //        list.add(array[0]);
104 //        map.put(array[0], 1);                                //将第一个数输入map集合中
105 //        
106 //        for(int i=1;i<array.length;i++) {
107 //            if(array[i-1]==array[i]) {                        //判断左右是否相等,若相等则对应值的次数加一
108 //                map.put(array[i-1], map.get(array[i-1])+1);
109 //            }else {                                            //否则将不同的数输入map集合中
110 //                map.put(array[i], 1);
111 //                list.add(array[i]);                            //将数组中不同的数放在list集合中。
112 //            }
113 //        }
114 //        System.out.println(list);                            //打桩,检测list中的数据
115 //        System.out.println(map);                            //打桩,检测map中的数据
116 //        
117 //        Object[] A=list.toArray();                            //将集合转成数组
118 //        System.out.println(A[5]);                            //检测
119 //        
120 //        //准备工作完成。
121 //        
122 //        
123 //        int sum=0;                                            //宽度之和。
124 //        
125 //        for(int i=1;i<A.length;i++) {
126 //            for(int j=0;j<i;j++) {
127 //                
128 //            }
129 //        }
130 //        
131 //        
132 //        
133     }
134 
135 }

猜你喜欢

转载自www.cnblogs.com/zhou2420032204/p/13378893.html