切金條

題目(算法課第八課)

一塊金條切成兩半,是需要花費(fèi)和長度數(shù)值一樣的銅板的。比如長度為20的 金條,不管切成長度多大的兩半,都要花費(fèi)20個(gè)銅板。一群人想整分整塊金 條,怎么分最省銅板?

例如,給定數(shù)組{10,20,30},代表整塊金條長度為10+20+30=60. 金條要分成10,20,30三個(gè)部分。
如果, 先把長度60的金條分成10和50,花費(fèi)60 再把長度50的金條分成20和30,花費(fèi)50 一共花費(fèi)110銅板。但是如果, 先把長度60的金條分成30和30,花費(fèi)60 再把長度30金條分成10和20,花費(fèi)30 一共花費(fèi)90銅板。

給定數(shù)組{10,20,30}

輸入一個(gè)數(shù)組,返回分割的最小代價(jià)。

分析

這是一個(gè)典型的哈夫曼問題,哈夫曼的思想就是這個(gè)題目的貪心策略。

做法

  1. 從一組數(shù)據(jù)里面每次拿出最小的兩個(gè)數(shù)
  2. 相加再放進(jìn)數(shù)組里
  • 直到只剩下一個(gè)數(shù)據(jù)為止
  • 他的所有葉子節(jié)點(diǎn)到根節(jié)點(diǎn)的代價(jià)一定是最小的

代碼實(shí)現(xiàn)

import java.util.PriorityQueue;

public class LessMoney{
    public static int lessMoney(int[]arr){
        PriorityQueue<Integer> pq = new PriorityQueue<Integer>(); //使用優(yōu)先級隊(duì)列
        int res = 0;
        int cur = 0;
        for (int i = 0; i < arr.length; i++) {
            pq.add(arr[i]);
        }
        while(pq.size()>1){
        //1-------------------------------------------------------------
            cur = pq.poll()+pq.poll();
            res += cur;
       //2-------------------------------------------------------------
            pq.add(cur);
        }
        return res;
    }
    public static void main(String[] args) {
        int arr[] = new int[] { 10, 20, 30 };//90
        System.out.println(lessMoney(arr));
    }
}
測試結(jié)果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.隨時(shí)找到數(shù)據(jù)流的中位數(shù) 【題目】有一個(gè)源源不斷地吐出整數(shù)的數(shù)據(jù)流,假設(shè)你有足夠的空間來保存吐出的數(shù)。請?jiān)O(shè)計(jì)一個(gè)...
    Miss_麥兜閱讀 1,147評論 0 1
  • 貪心的過程要么是最大要么是最小,堆可以很好的滿足這個(gè)要求。 問題1:一塊金條切成兩半,是需要花費(fèi)和長度數(shù)值一樣的銅...
    放開那個(gè)BUG閱讀 373評論 0 0
  • 急性子的女人往往給我們留下的都是一種做什么事都風(fēng)風(fēng)火火,行動快過大腦的印象,不怎么討人喜歡。其實(shí),急性子的女人有許...
    靈秀世佳_馬易云閱讀 1,013評論 0 0
  • 在軍校調(diào)整改革大潮中,有人嘆息“母校沒了”,有人慶幸 “母校還在”。無論“母校”何去何從,我們對她的記憶不會因歲月...
    弘毅劍心閱讀 3,756評論 1 3
  • 當(dāng)機(jī)智的網(wǎng)友們把“520”譯為“我愛你”后,這個(gè)普通的日子便成為一個(gè)浪漫的節(jié)日,其受追捧的程度大有超越“2·14”...
    趣讀書吧閱讀 234評論 0 0

友情鏈接更多精彩內(nèi)容