蓝桥杯--基础(哈夫曼)
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;public class BASIC28 {//哈夫曼书public static void main(String[] args) {Scanner Scanner=new Scanner(System.in);int n=Scanner.nextInt();List<Integer> list=new ArrayList<Integer>() ;for(int i=0;i<n;i++){list.add(Scanner.nextInt());}//数组删除一个元素比较的麻烦(使用java里面的数组不能直接的删除一个元素)//但是使用list就是可以直接的进行删除了是吗???//原来使用list是可以直接的进行排序的int sum=0;while(list.size()!=1){Collections.sort(list);//要输出的是每次相加的这个和是吧,那么需要另外的开辟一个来进行存储???list.add(list.get(0)+list.get(1));sum+=list.get(0)+list.get(1);//当把第一个元素删除之后,原本的第二个元素就是变为了第一个元素//所以这个地方需要进行删除还是0list.remove(0);list.remove(0);}//最后一个数字就是计算得到的,已经在前面的基础上添加过了System.out.println(sum);}
}
根据可能的规则,直接使用list进行存储(因为提供直接移除元素的函数)
然后需要注意的就是list也是可以排序的,不过是Collections.sort()
然后数组的排序是Arrays.sort() 进行排序
最后就是在移除的时候,应该移除的是前面的两个最小的
但是当移除一个之后,后面的那个又会接着补充进来,所以这个时候就是这个样子的