贪心算法-金条切割问题

1、题目描述

一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的金条,不管切成长度多大的两半,都要花费20个铜板。

问:一群人想整分整块金条,怎么分最省铜板?

例如,给定数组{10,20,30},代表一共三个人,整块金条长度为10+20+30=60。

金条要分成10,20,30。如果先把长度60的金条分成10和50,花费60;再把长度50的金条分成20和30,花费50;一共花费110铜板。

但是如果先把长度60的金条分成30和30,花费60;再把长度30金条分成10和20,花费30;一共花费90铜板。

输入一个数组,返回分割的最小代价。

2、思路分析

通过小根堆,首先将所有数据加入到小根堆,

然后只要小根堆数据个数大于1,就弹出两个数并累加,

之后再把累加值放到小根堆里去,所有的累加和即为最小代价

3 代码实现:

c 复制代码
public static int lessMoney(int[] arr) {
    //1、准备一个小根堆
    PriorityQueue<Integer> pQ = new PriorityQueue<>();
    //2、把所有数字扔到小根堆中
    for (int i = 0; i < arr.length; i++) {
    pQ.add(arr[i]);
    }
    int sum = 0;
    int cur = 0;
    while (pQ.size() > 1) {
        //3、每次弹出两个数字进行结合
        cur = pQ.poll() + pQ.poll();
        sum += cur;
        //4、把结合的数扔到小根堆中
        pQ.add(cur);
    }
    return sum;
}
相关推荐
九年义务漏网鲨鱼11 分钟前
【大模型面经】千问系列专题面经
人工智能·深度学习·算法·大模型·强化学习
源码之家1 小时前
机器学习:基于大数据二手房房价预测与分析系统 可视化 线性回归预测算法 Django框架 链家网站 二手房 计算机毕业设计✅
大数据·算法·机器学习·数据分析·spark·线性回归·推荐算法
Lv Jianwei1 小时前
Longest Palindromic Substring最长回文子串-学习动态规划Dynamic Programming(DP)
算法
WWZZ20251 小时前
快速上手大模型:深度学习7(实践:卷积层)
人工智能·深度学习·算法·机器人·大模型·卷积神经网络·具身智能
l1t2 小时前
用SQL求解advent of code 2024年23题
数据库·sql·算法
10岁的博客2 小时前
二维差分算法高效解靶场问题
java·服务器·算法
轻微的风格艾丝凡2 小时前
锂电池 SOC 估计技术综述:成熟算法、新颖突破与车企应用实践
算法·汽车
Codeking__2 小时前
动态规划算法经典问题——01背包问题
算法·动态规划
R-G-B2 小时前
归并排序 (BM20 数组中的逆序对)
数据结构·算法·排序算法
少许极端2 小时前
算法奇妙屋(十二)-优先级队列(堆)
数据结构·算法·leetcode·优先级队列··图解算法