恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

DeepSeek LeetCode LCP 16. 游乐园的游览计划 Java实现

  • 首页
  • 资讯中心
  • /
  • DeepSeek LeetCode LCP 16. 游乐园的游览计划 Java实现

相关资讯

Face Director插件实战:四大后期软件自动化面部动画全流程指南 2026/8/21 8:10:07
动态定价监控实战:从原理到Python实现峰谷价格提醒系统 2026/8/21 8:10:07
2026大模型算法岗面试指南:Transformer与RAG系统设计 2026/8/21 8:05:07

最新资讯

Blender 5.2/5.3 DLSS 4.5与新布料解算器实战评估指南
基于轻量级CNN的结膜图像贫血检测:从原理到PyTorch实战
SpringBoot校园招聘系统开发实践与技术解析
【AI架构前沿】MEMO:解耦推理与记忆,破解大模型“知识更新“与“灾难性遗忘“的两难困境
步级偏好学习:让生成式智能体在社交模拟中展现细腻人格
加权移动平均法:从原理到Python实战,提升时序预测灵敏度

今日推荐

OpenCode AI编程助手:从核心原理到本地部署的完整实践指南
基于SpringBoot与Vue的企业资产与采购管理系统设计与实现(程序+文档+讲解)
Linux命令-uucico(UUCP传输程序)

本周热门

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码
【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码
隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

DeepSeek LeetCode LCP 16. 游乐园的游览计划 Java实现

发布时间:2026/8/21 8:10:07
DeepSeek    LeetCode LCP 16. 游乐园的游览计划 Java实现 这道题的核心是在无向图中找到两个共享顶点A的三角形A-B-C-A 和 A-B-C-A使得它们覆盖的不同顶点权值之和最大。由于数据规模较大顶点和边最多10000暴力枚举所有三角形会超时通常采用根号分治来优化。Java实现代码javaimport java.util.*;class Solution {public int maxWeight(int[][] edges, int[] value) {int n value.length;// 1. 建图邻接表用于遍历 邻接矩阵用于快速判断边是否存在ListInteger[] graph new List[n];boolean[][] hasEdge new boolean[n][n];for (int i 0; i n; i) graph[i] new ArrayList();for (int[] e : edges) {int u e[0], v e[1];graph[u].add(v);graph[v].add(u);hasEdge[u][v] hasEdge[v][u] true;}// 2. 根号分治度数 limit 的为“大点”否则为“小点”int limit (int) Math.sqrt(n);boolean[] isBig new boolean[n];for (int i 0; i n; i) {if (graph[i].size() limit) isBig[i] true;}// 存储每个顶点参与的三角形只存顶点三元组和权值和Listint[][] triByVertex new List[n];for (int i 0; i n; i) triByVertex[i] new ArrayList();// 3. 枚举所有三角形// 3.1 枚举小点 v枚举其两个邻居 a, b检查 a,b 是否相连for (int v 0; v n; v) {if (isBig[v]) continue;ListInteger adj graph[v];for (int i 0; i adj.size(); i) {for (int j i 1; j adj.size(); j) {int a adj.get(i), b adj.get(j);if (hasEdge[a][b]) {int sum value[v] value[a] value[b];triByVertex[v].add(new int[]{v, a, b, sum});triByVertex[a].add(new int[]{v, a, b, sum});triByVertex[b].add(new int[]{v, a, b, sum});}}}}// 3.2 枚举大点枚举任意三个大点检查是否两两相连ListInteger bigNodes new ArrayList();for (int i 0; i n; i) if (isBig[i]) bigNodes.add(i);for (int i 0; i bigNodes.size(); i) {for (int j i 1; j bigNodes.size(); j) {for (int k j 1; k bigNodes.size(); k) {int a bigNodes.get(i), b bigNodes.get(j), c bigNodes.get(k);if (hasEdge[a][b] hasEdge[a][c] hasEdge[b][c]) {int sum value[a] value[b] value[c];triByVertex[a].add(new int[]{a, b, c, sum});triByVertex[b].add(new int[]{a, b, c, sum});triByVertex[c].add(new int[]{a, b, c, sum});}}}}// 4. 计算答案枚举公共顶点 A找两个最优三角形组合int ans 0;for (int a 0; a n; a) {Listint[] tris triByVertex[a];if (tris.size() 2) {// 只有一个三角形时只能游玩一个答案就是该三角形的权值和if (tris.size() 1) ans Math.max(ans, tris.get(0)[3]);continue;}// 按权值和降序排序只需考虑前几个tris.sort((x, y) - y[3] - x[3]);// 尝试前 min(5, size) 个组合通常足够for (int i 0; i Math.min(5, tris.size()); i) {for (int j i 1; j Math.min(5, tris.size()); j) {int[] t1 tris.get(i), t2 tris.get(j);SetInteger set new HashSet();set.add(t1[0]); set.add(t1[1]); set.add(t1[2]);set.add(t2[0]); set.add(t2[1]); set.add(t2[2]);int sum 0;for (int node : set) sum value[node];ans Math.max(ans, sum);}}}return ans;}}复杂度分析· 时间复杂度O(N√N)在 N10000 的规模下可接受。· 空间复杂度O(N M)用于存储图、邻接矩阵及三角形信息。核心思路1. 问题转化将游玩路径抽象为两个共享顶点 A 的三角形。2. 高效找三角形利用“根号分治”平衡大小顶点的枚举开销避免 O(N^3) 的暴力。3. 枚举组合对每个顶点 A枚举其参与的所有三角形取两个去重后权值和最大的组合。4. 剪枝优化只需考虑每个顶点下权值和最大的前几个三角形进行组合无需全量枚举。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号