2021-03-04:一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的金条,不管
2021-03-04 22:11
357 查看
2021-03-04:一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的金条,不管怎么切,都要花费20个铜板。 一群人想整分整块金条,怎么分最省铜板? 例如,给定数组{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铜板。输入一个数组,返回分割的最小代价。
福哥答案2021-03-04:
小根堆。
1.数组全部放入小根堆。
2.pop两个数并且相加,和为S。
3.结果里加上S。
4.把S放进小根堆里。
5.重复步骤2。直到数组的长度为1,停止循环。
有代码。
代码用golang编写,代码如下:
package main import ( "container/heap" "fmt" "sort" ) func main() { arr := []int{10, 30, 20} ret := lessMoney(arr) fmt.Println(ret) } func lessMoney(arr []int) int { arrLen := len(arr) if arrLen <= 1 { return 0 } h := IntHeap(arr) heap.Init(&h) ans := 0 twosum := 0 for i := 1; i < arrLen; i++ { twosum = heap.Pop(&h).(int) + heap.Pop(&h).(int) ans += twosum heap.Push(&h, twosum) } return ans } //小根堆 type IntHeap sort.IntSlice func (c IntHeap) Len() int { return len(c) } func (c IntHeap) Less(i, j int) bool { return c[i] < c[j] } func (c IntHeap) Swap(i, j int) { c[i], c[j] = c[j], c[i] } func (c *IntHeap) Push(x interface{}) { *c = append(*c, x.(int)) } func (c *IntHeap) Pop() interface{} { old := *c n := len(old) x := old[n-1] *c = old[0 : n-1] return x }
执行结果如下:
相关文章推荐
- 一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的 金条,不管切成长度多大的两半,都要花费20个铜板。一群人想整分整块金 条,怎么分最省铜板。
- 请实现这两个变量数值的交换(比如int a = 10,int b = 20变成int a = 20,int b = 10),要求写3种或3种以上的实现方式
- 为什么free不像malloc一样需要长度参数?
- 推荐一款简历神器,找工作再也不愁了 大家每次换工作或者找工作的时候,都需要一个好的简历。简历的重要性就不言而喻了,简历是找工作的一块敲门砖,就像「未见其人,先闻其声」一样,在找你笔试或者面试之前
- 我需要一款通吃所有操作系统的平板,就像PC一样
- 算法题20 数值的整数次方
- 正则表达式限制字符串为英文和数字,长度为1-20之间
- ArrayList的三种遍历方式 首先你需要一个实体类,随便怎么样都好,比如: public class Hero { public String name; public float hp;
- 求字符串最长连续字符的长度,比如aaaabbcc的长度为4,aabb的长度为2,ab的长度为1。
- 安装 Kali Linux 后需要做的 20 件事
- c/c++中求取字符串,数组,一块内存的长度
- 需要把你系统中的部分程序独立出来,比如用户设置的这个程序。
- 一根长度为133米的材料需要截成长度为19米和23米的短料,求两种短料各截多少根时剩余的材料最少?
- javaScript中自定义sort中的比较函数,用于比较字符串长度,数值大小
- 正则表达式——判断字符串组成,第一个必须是字母,后面可以是字母、数字、下划线,总长度为5-20
- 20版本的idea关于tomcat修改页面时需要重启服务
- 我需要一块二向箔,清理用(模拟)
- Linux内核中编写一个模块,实现申请一块内存,需要考虑哪些方面?
- 题目:一块不均匀的主板,从头烧到尾要2个小时,最少需要几块相同款型的主板,才能准确的衡量出2小时30分钟?
- 便宜的北京住宿,适合学生一族----没想到会有这么合适的旅馆呢!每天20-70为主呢,有的还有电脑、网络------经常去北京旅游,难免会有需要的时候。推荐给大家,以备急需!!!