牛牛算数——最小堆解法

牛牛算数

http://www.nowcoder.com/questionTerminal/1732b7aad48c47cf89867a9f37bf80b6

为了使得花费最小,就要使越大的数字越晚计算,每次取最小的两个值进行计算。借助最小堆,每次计算最小的两个数,将两个数的和放入最小堆,直至堆的大小为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;
    }
}
全部评论

相关推荐

11-24 00:11
已编辑
广东工业大学 算法工程师
避雷深圳&nbsp;&nbsp;yidao,试用期&nbsp;6&nbsp;个月。好嘛,试用期还没结束,就直接告诉你尽快找下一家吧,我谢谢您嘞
牛客75408465号:笑死,直属领导和 hr 口径都没统一,各自说了一些离谱的被裁理由,你们能不能认真一点呀,哈哈哈哈哈😅😅😅
点赞 评论 收藏
分享
冲芭芭拉鸭:你这图还挺新,偷了。
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务