刷题前唠嗑
题目:到达首都的最少油耗
题目描述
代码与解题思路
func minimumFuelCost(roads [][]int, seats int) (ans int64) {
g := make([][]int, len(roads)+1)
for _, v := range roads { // g[x] 数组存的是与 x 相连的节点
x, y := v[0], v[1]
g[x] = append(g[x], y)
g[y] = append(g[y], x)
}
var dfs func(int, int) int
dfs = func(cur, father int) int {
size := 1
for _, child := range g[cur] {
// 只从父节点向子节点搜索
if child != father {
// v 从子节点变当前节点, cur 从当前节点变父节点, 统计子树大小
size += dfs(child, cur)
}
}
if cur > 0 { // cur 不是根节点了, 可以计算油耗了
ans += int64((size-1)/seats + 1)
}
return size
}
dfs(0, -1)
return ans
}
这道题我自己想不出来解法,学了大佬的题解思路才做的,看到这一坨东西,我是真没什么好的思路,之前也没做过类似的题目
-
根据题目的节点编号是从 0 开始作为根,然后依次增加的性质,我们可以用一个二维数组把每一层的树连接到的节点存起来,举个例子:
-
然后我们就从根节点开始搜索,if child != father 保证只想子节点搜索,size 记录子节点的大小(子节点的高度),如果当前节点不是根节点,那我们就可以开始累加计算题目要求的油耗了(我们就是根据子节点的大小和题目给的座位进行计算)
原文地址:https://blog.csdn.net/Locky136/article/details/134798541
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_49126.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。