当前位置: 首页 > news >正文

Leetcode 2973. Find Number of Coins to Place in Tree Nodes

  • Leetcode 2973. Find Number of Coins to Place in Tree Nodes
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:2973. Find Number of Coins to Place in Tree Nodes

1. 解题思路

这道题思路上其实挺简单的,就是一个遍历的思路,找到每一个点对应的子树当中所有的节点,然后按照条件进行赋值即可。

不过,直接地实现会导致超时问题的问题,因此我们对此需要做一下剪枝,具体来说的话,由于我们要求取3个元素的最大乘积,因此考虑到正负性,选择上必然只有两种情况:

  1. 最大的三个元素
  2. 最大的一个元素与最小的两个元素

因此,我们事实上不需要保留全部的元素,只需要排序之后对每一个子树保留至多5个元素即可,从而大幅简化我们的存储还有排序复杂度。

2. 代码实现

给出python代码实现如下:

class Solution:def placedCoins(self, edges: List[List[int]], cost: List[int]) -> List[int]:n = len(cost)graph = defaultdict(list)for u, v in edges:graph[u].append(v)graph[v].append(u)tree = {}def dfs(root, parent):nonlocal treesubtree = [root]for node in graph[root]:if node == parent:continuesub = dfs(node, root)if len(sub) < 5:subtree.extend(sub)else:subtree.extend(sub[:2] + sub[-3:])subtree = sorted(subtree, key=lambda x: cost[x])tree[root] = subtreereturn subtreedfs(0, -1)ans = [1 for _ in range(n)]for i in range(n):subtree = tree[i]if len(subtree) < 3:continueans[i] = max(0, cost[subtree[0]] * cost[subtree[1]] * cost[subtree[-1]], cost[subtree[-1]] * cost[subtree[-2]] * cost[subtree[-3]])return ans

提交代码评测得到:耗时1851ms,占用内存38.5MB。

http://www.lryc.cn/news/266794.html

相关文章:

  • 如何调动销售人员使用CRM的积极性?
  • 数值分析期末复习
  • k8s的探针
  • Python 爬虫之下载视频(五)
  • Gradle下载地址
  • 顺序表的实现(头插、尾插、头删、尾删、查找、删除、插入)
  • VMware虚拟机安装Ubuntu系统教程
  • 41 sysfs 文件系统
  • C++面试宝典第9题:找出第K大元素
  • “马屁精”李白
  • python之glob的用法
  • 【adb】电脑通过ADB向手机传输文件
  • npm的常用使用技巧
  • 【网络奇遇记】揭秘计算机网络的性能指标:速率|带宽|吞吐量|时延
  • ACM中算法时间约束
  • C++11的列表初始化和右值引用
  • 千帆起航:探索百度智能云千帆AppBuilder在AI原生应用开发中的革新之路
  • RevIT™ AAV Enhancer, 提高AAV产量的又一利器!
  • Kubectl 部署有状态应用(下)
  • Jmeter 性能 —— 监控服务器!
  • 离散型制造企业为什么要注重MES管理系统的实施
  • Linux系统中跟TCP相关的内核参数
  • 代理模式(Proxy)
  • 在MacOS上Qt配置OpenCV并进行测试
  • java数据结构与算法刷题-----LeetCode167:两数之和 II - 输入有序数组
  • Linux:jumpserver V3的安装与升级(在线离线)(2)
  • 【GoLang】Go语言几种标准库介绍(一)
  • 短剧分销系统:月入百w的新模式
  • 鞋服用户运营策略如何实现有效闭环?
  • 简单工厂、工厂方法、抽象工厂和策略模式