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

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://www.xdnf.cn/news/20112.html

相关文章:

  • Redis-持久化
  • 疯狂星期四文案网第61天运营日记
  • CSP-J初赛for(auto)用法
  • 【Leetcode】高频SQL基础题--180.连续出现的数字
  • 计算机原理-计算机操作系统-硬盘缓存、断电丢数据篇
  • 力扣416:分割等和子集
  • 【无GGuF版本】如何在Colab下T4运行gpt-oss 20B
  • spring事物失效场景
  • MySQL主从同步--主从复制进阶
  • Java 提取 PDF 文件内容:告别手动复制粘贴,拥抱自动化解析!
  • 生成模型实战 | 深度分层变分自编码器(Nouveau VAE,NVAE)
  • 华为在国内搞的研发基地有多野?标杆游学带你解锁“研发界顶流”
  • leetcode算法刷题的第二十七天
  • 【开题答辩全过程】以 高校教室管理系统为例,包含答辩的问题和答案
  • 24V降12V,8A,电路设计,WD5030L
  • 2025年- H118-Lc86. 分隔链表(链表)--Java版
  • 工厂办公环境如何实现一台服务器多人共享办公
  • 【AI论文】Robix:一种面向机器人交互、推理与规划的统一模型
  • 【Java实战㉖】深入Java单元测试:JUnit 5实战指南
  • python代码Bug排查
  • 案例分享|企微智能会话风控系统:为尚丰盈铝业筑牢沟通安全防线
  • 【Vue3+TypeScript】H5项目实现企业微信OAuth2.0授权登录完整指南
  • 医疗问诊陪诊小程序:以人性化设计构建健康服务新生态
  • 微信小程序一个页面同时存在input和textarea,bindkeyboardheightchange相互影响
  • 基于STM32单片机的水位浑浊度检测设计
  • Vue CLI 环境变量和文件加载规则.env文件
  • 《Istio故障溯源:从流量劫持异常到服务网格的底层博弈》
  • AI智能优化SEO关键词策略实战
  • 反序列化的学习笔记
  • Docling将pdf转markdown以及与AI生态集成