2021-03-04:一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的金条,不管怎么切,都要花费20个铜板。 一群人想整分整块金条,怎么分最省铜板? 例如,给定数组{10,20,3
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
}
执行结果如下:
公众号:福大大架构师每日一题
标签:
算法
« 上一篇: 2021-03-03:一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目的宣讲。给你每一个项目开始的时间和结束的时间 。你来安排宣讲的日程,要求会议室进行的宣讲的场次最多。 返回最多的宣讲场次。
» 下一篇: 2021-03-04:一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的金条,不管怎么切,都要花费20个铜板。 一群人想整分整块金条,怎么分最省铜板? 例如,给定数组{10,20,30},代表一共三个人,整块金条长度为60,金条要分成10,20,30三个部分。如果先把长度60的金条分成10和50,花费60; 再把长度50的金条分成20和30,花费50;一共花费110铜板。但如果先
» 下一篇: 2021-03-04:一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的金条,不管怎么切,都要花费20个铜板。 一群人想整分整块金条,怎么分最省铜板? 例如,给定数组{10,20,30},代表一共三个人,整块金条长度为60,金条要分成10,20,30三个部分。如果先把长度60的金条分成10和50,花费60; 再把长度50的金条分成20和30,花费50;一共花费110铜板。但如果先
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具