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

Qwen模型 LeetCode 2581. 统计可能的树根数目 Java实现

哇这道2581题超有趣的让我来给你讲讲我的解法~ 这道题就像是在玩侦探游戏我们要找出所有可能的树根嫌疑人题目大意是给我们一些从树中删除边的信息让我们推断出哪些节点可能成为原来的树根。这就像是案发现场只留下了脚印我们要还原整个故事。javaimport java.util.*;public class Solution {public int rootCount(int[][] edges, int[][] guesses, int k) {int n edges.length 1; // 节点数量// 构建邻接表表示的树ListListInteger graph new ArrayList();for (int i 0; i n; i) {graph.add(new ArrayList());}for (int[] edge : edges) {graph.get(edge[0]).add(edge[1]);graph.get(edge[1]).add(edge[0]);}// 将guesses转换为Set方便快速查找SetString guessSet new HashSet();for (int[] guess : guesses) {guessSet.add(guess[0] , guess[1]);}// 第一次DFS以0为根计算初始猜对次数int[] correctGuesses {0};boolean[] visited new boolean[n];dfs(0, -1, graph, guessSet, correctGuesses);// 第二次DFS换根DPint[] result {0};reRootDfs(0, -1, graph, guessSet, correctGuesses[0], k, result);return result[0];}// 第一次DFS计算以0为根时猜对的次数private void dfs(int node, int parent, ListListInteger graph,SetString guessSet, int[] correctGuesses) {for (int child : graph.get(node)) {if (child parent) continue;// 检查这条边是否被正确猜测if (guessSet.contains(node , child)) {correctGuesses[0];}dfs(child, node, graph, guessSet, correctGuesses);}}// 换根DFSprivate void reRootDfs(int node, int parent, ListListInteger graph,SetString guessSet, int currentCorrect, int k, int[] result) {// 如果当前根节点满足条件if (currentCorrect k) {result[0];}for (int child : graph.get(node)) {if (child parent) continue;// 计算换根后的正确猜测数int newCorrect currentCorrect;// 移除node-child这条边的影响if (guessSet.contains(node , child)) {newCorrect--;}// 添加child-node这条边的影响if (guessSet.contains(child , node)) {newCorrect;}reRootDfs(child, node, graph, guessSet, newCorrect, k, result);}}}诶你知道吗这道题最精妙的地方在于换根DP的思想。就像是一棵树在旋转每次把一个子节点变成新的根节点我们只需要考虑边的方向变化带来的影响。我来打个比方想象你有一串圣诞灯每个灯泡都可以当作电源插头。当我们把插头从一个灯泡换到另一个时只需要关心它们之间那条线的电流方向变了没其他线路都不用重新检查这个算法的时间复杂度是O(n)超级高效有没有而且思路特别清晰先固定一个根统计答案然后通过遍历的方式转动这棵树动态维护猜对的次数。你最近是在准备面试吗这种换根DP的题目在大厂面试中还挺常见的。要是想练更多类似的题目我可以给你推荐几道经典的~要不要来个树形DP特训
http://www.gsyq.cn/news/1362893.html

相关文章:

  • C51代码空间固定地址常量定义方法与实战
  • 8051单片机sbit与extern bit的L1警告解决方案
  • AI同质化与认知依赖:金融系统性风险的新挑战与监管应对
  • 高维因果推断:自动双机器学习(ADML)估计器原理与应用
  • MLL+KDE:高维数据统计推断的无分箱密度估计方法
  • 国防AI采购变革:如何用OTA协议与敏捷开发破解商业技术整合难题
  • Windows计划任务schtasks命令的‘隐藏’玩法与避坑指南:从权限设置到中文路径处理
  • Unity ShaderGraph设计思维:从示例资源读懂URP渲染管线
  • Taotoken 模型广场如何帮助开发者选择合适的 AI 模型
  • 保姆级教程:用ESM-2模型为你的蛋白质序列生成向量表示(Python实战)
  • C#根据时间加密和防止反编译的两种方案
  • DL:生成对抗网络的基本原理与 PyTorch 实现
  • Unity自定义碰撞与力场系统实战指南
  • AssetRipper实战指南:Unity资源诊断与AB包健康度审计
  • 2026年当前浙江酱香白酒选购指南:聚焦源头厂家舜祥酒业 - 2026年企业推荐榜
  • ISP模型与硬件平台配置迁移实践指南
  • 8051单片机PDATA与XDATA存储访问优化解析
  • 2026成都签证代办价格与机构评测:签证代办公司/签证代办多少钱/签证代办机构/美国签证代办/英国签证代办/英国签证办理/选择指南 - 优质品牌商家
  • Windows命令行高效安装与卸载Arm开发工具指南
  • 解决ST-Link USB通信错误的全面指南
  • 统信UOS服务器版初体验:除了装软件,它的包管理、开发工具链和日常运维命令跟CentOS有啥不同?
  • 告别手动标注!用MFA在Windows 10上5分钟搞定音频文本对齐(附Praat查看教程)
  • 机器翻译质量如何影响大语言模型心智理论评估的准确性
  • 进化计算在计算机视觉中的应用:从特征选择到神经架构搜索
  • UE5 C++ UI生命周期管理:UUserWidget创建、绑定与销毁全解析
  • UE5 Paper2D编辑器契约:SpriteEditorOnlyTypes.h深度解析
  • Calico BGP故障诊断:从BIRD未就绪到Established的全链路排查
  • 超效率SBM模型Python实战:用scipy.optimize处理含非期望产出的政府数据效率排名
  • 从狗叫到警笛:用ESC-50数据集教你玩转环境声音识别(Python实战+可视化分析)
  • Android高版本HTTPS抓包解法:Magisk+MoveCert证书升权实战