思路:排序找到最小的两个值,两值之和既是原数组的最后一个元素也是sum的加和。这里边用到了ArrayList(动态数组)方法:ArrayList 是 java 集合框架中比较常用的数据结构。继承自 AbstractList,实现了 List 接口。底层基于数组实现容量大小动态变化。允许 null 的存在。同时还实现了 RandomAccess、Cloneable、Serializable 接口,所以ArrayList 是支持快速访问、复制、序列化的。需要注意的是当我们删除元素的时候,执行remove原数组就已经发生变化了,所以一直都是remove(0)
代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Huffuman {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
ArrayList<Integer> arr = new ArrayList<Integer>();
for (int i=0;i<n;i++){
arr.add(sc.nextInt());
}
int sum =0;
while (arr.size() != 1){
Collections.sort(arr);
int all = arr.get(0)+arr.get(1);
sum+=all;
arr.remove(0);
arr.remove(0);
arr.add(all);
}
System.out.println(sum);
}
}