为了使得花费最小,就要使越大的数字越晚计算,每次取最小的两个值进行计算。借助最小堆,每次计算最小的两个数,将两个数的和放入最小堆,直至堆的大小为1。
import java.util.*;
public class Solution {
/**
* 返回一个数字表示输出计算n个数字和的最小花费的时间。
* @param n int整型 表示有n个数。
* @param c int整型 参数c
* @param a int整型一维数组 ai表示第i个数的大小
* @return long长整型
*/
public long solve(int n, int c, int[] a) {
long res = 0;
PriorityQueue<Integer> pq = new PriorityQueue<>();
for (int i : a)
pq.offer(i);
while (pq.size() != 1) {
int x = pq.poll();
int y = pq.poll();
int xy = x + y;
res += xy;
pq.offer(xy);
}
return c * res;
}
} 
京公网安备 11010502036488号