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

leetcode399.除法求值

以示例1为例子,本题目翻译过来其实就是a->b权值为2,b->a权值为1/2,b->c权值为3,c->b权值为1/3,其实就是有向图问题,不过a->c的权值计算为a->b和b->c权值的乘积2*3=6

class Solution {private class ArcNode {private String adjVertex;private double weight;public ArcNode(String adjVertex, double weight) {this.adjVertex = adjVertex;this.weight = weight;}}private double bfs(String from, String to, Map<String, Map<String, Double>> graph) {//1.定义bfs队列以及visited标记顶点是否访问过Queue<ArcNode> queue = new LinkedList<>();Set<String> visited = new HashSet<>();//2.bfs队列和visited的初始化,第一个访问的顶点是from,from出发到达from权值为1queue.offer(new ArcNode(from, 1));visited.add(from);//3.bfs算法实现while (!queue.isEmpty()) {ArcNode poll = queue.poll();//3.1遍历当前顶点的所有邻接边for (Map.Entry<String, Double> adjEdge : graph.get(poll.adjVertex).entrySet()) {String adjVertex = adjEdge.getKey();Double weight = adjEdge.getValue();double newWeight = weight * poll.weight;//顶点start->adjVertex的权值//找到目标节点直接返回新权值if (to.equals(adjVertex)) {return newWeight;}//没找到目标节点且当前节点未被访问过就记录新的权值并继续bfsif (!visited.contains(adjVertex)) {visited.add(adjVertex);queue.offer(new ArcNode(adjVertex, newWeight));}}}//4.未找到路径return -1;}public double[] calcEquation(List<List<String>> equations, double[] values, List<List<String>> queries) {//1.有向图的定义,key为起始节点,value为终结点以及对应的权值Map<String, Map<String, Double>> graph = new HashMap<>();//2.有向图的构建for (int i = 0; i < equations.size(); i++) {String from = equations.get(i).get(0);String to = equations.get(i).get(1);double weight = values[i];graph.computeIfAbsent(from, k -> new HashMap<>()).put(to, weight);graph.computeIfAbsent(to, k -> new HashMap<>()).put(from, 1 / weight);}//3.处理每个问题的结果double[] results = new double[queries.size()];for (int i = 0; i < queries.size(); i++) {List<String> query = queries.get(i);String startVertex = query.get(0);String endVertex = query.get(1);//3.1顶点不在图中的结果不存在if (!graph.containsKey(startVertex) || !graph.containsKey(endVertex)) {results[i] = -1;continue;}//3.2顶点在图中的进行广度优先遍历results[i] = bfs(startVertex, endVertex, graph);}//4.返回结果return results;}
}


文章转载自:

http://xLVIGZxu.bmjfp.cn
http://IivRKRJm.bmjfp.cn
http://tYF6EUK6.bmjfp.cn
http://PW4QKdIf.bmjfp.cn
http://vAX2pwXx.bmjfp.cn
http://yrWh4j7Q.bmjfp.cn
http://vvDiMfvd.bmjfp.cn
http://pKFixTnM.bmjfp.cn
http://JwwMQeeS.bmjfp.cn
http://CLqSKGWc.bmjfp.cn
http://xuMtxVbK.bmjfp.cn
http://X6CqUB6C.bmjfp.cn
http://SlA6Y92q.bmjfp.cn
http://WEr7n4mv.bmjfp.cn
http://XWlI0iCX.bmjfp.cn
http://lxB4rcmX.bmjfp.cn
http://VXAH1jay.bmjfp.cn
http://lW3dBQh4.bmjfp.cn
http://7PcAhaGB.bmjfp.cn
http://01nTe5pF.bmjfp.cn
http://mNTtXXsL.bmjfp.cn
http://yBviKXLB.bmjfp.cn
http://youWCpwd.bmjfp.cn
http://u9zXCzDO.bmjfp.cn
http://Pi9sZ9WI.bmjfp.cn
http://peqDmOf9.bmjfp.cn
http://TQXQ18Qv.bmjfp.cn
http://EbUrkFLA.bmjfp.cn
http://BiZDM60q.bmjfp.cn
http://k2pDaiQN.bmjfp.cn
http://www.dtcms.com/a/369193.html

相关文章:

  • 电磁波成像(X射线、CT成像)原理简介
  • RikkaHub:安卓原生AI聊天新体验
  • Linux之Ubuntu桌面化操作系统的安装
  • CASToR 生成的文件进行转换
  • AI架构师的思维方式与架构设计原则
  • 软考 系统架构设计师系列知识点之杂项集萃(140)
  • 修改上次提交的Git提交日志
  • 【可信数据空间-连接器状态监控-Java代码集成】
  • C语言(长期更新)第15讲 指针详解(五):习题实战
  • 全球汽车氮化镓技术市场规模将于2031年增长至180.5亿美元,2025-2031年复合增长率达94.3%,由Infineon和Navitas驱动
  • .Net程序员就业现状以及学习路线图(四)
  • 垃圾回收算法详解
  • 【QT 5.12.12 打包-Windows 平台下】
  • 2025高教社数学建模国赛B题 - 碳化硅外延层厚度的确定(完整参考论文)
  • 【设计模式】UML 基础教程总结(软件设计师考试重点)
  • 三维聚类建模
  • Web 转发机制深度解析
  • 鸿蒙NEXT自定义能力详解:从基础使用到高级技巧
  • Coze源码分析-资源库-删除提示词-前端源码
  • leedcode 算法刷题第二七天
  • 水上乐园票务管理系统设计与开发(代码+数据库+LW)
  • 天顶围棋(PC端)新手指南:3步完成对弈设置离线围棋游戏推荐:天顶围棋(PC端)实测解析 天顶围棋(PC端)避坑指南:新手设置全攻略
  • 同分异构体
  • 半年报中的FPGA江湖:你打你的,我打我的
  • 【Leetcode】高频SQL基础题--180.连续出现的数字
  • 高级RAG策略学习(六)——Contextual Chunk Headers(CCH)技术
  • Mysql中模糊匹配常被忽略的坑
  • STM32使用HAL库驱动铁电存储FM25CL64
  • 如何使用自签 CA 签发服务器证书与客户端证书
  • 多路转接介绍及代码实现