除法求值00

题目链接

除法求值

题目描述


注意点

  • Ai, Bi, Cj, Dj 由小写英文字母与数字组成
  • 输入总是有效的,可以假设除法运算中不会出现除数为 0 的情况,且不存在任何矛盾的结果
  • 未在等式列表中出现的变量是未定义的,因此无法确定它们的答案

解答思路

  • 存储点、边及权值之间的关系,很容易想到使用图,本题中点都是字符,且有可能是"ab"、"zz"这种字符串形式,所以使用map存储点的信息,保证唯一的同时将每个字符都对应赋一个整型的唯一标识,方便后续存储每个点的边信息
  • 新建一个对象Pair存储点及权值信息,其中index对应点,value对应该边的权值,在List[] edges中,edges[i]为一个List,存储唯一标识为i的点的所有边及权值信息,在存储完所有的点和边的信息后,求任意两个点之间的距离时,只需要从起点开始广度优先遍历所有其邻边直到没有边或者到达了终点为止,就可求出结果

代码

class Solution {public double[] calcEquation(List<List<String>> equations, double[] values, List<List<String>> queries) {int nodeCount = 0;// Map存储节点,保证每个节点只计入一次,key对应节点,value对应节点唯一标识Map<String, Integer> nodeMap = new HashMap<>();for (int i = 0; i < equations.size(); i++) {if (!nodeMap.containsKey(equations.get(i).get(0))) {nodeMap.put(equations.get(i).get(0), nodeCount++);}if (!nodeMap.containsKey(equations.get(i).get(1))) {nodeMap.put(equations.get(i).get(1), nodeCount++);}}// 对于每个点,存储其直接连接到的所有点及对应的权值List<Pair>[] edges = new List[nodeCount];for (int i = 0; i < nodeCount; i++) {edges[i] = new ArrayList<>();}for (int i = 0; i < equations.size(); i++) {int node1 = nodeMap.get(equations.get(i).get(0));int node2 = nodeMap.get(equations.get(i).get(1));edges[node1].add(new Pair(node2, values[i]));edges[node2].add(new Pair(node1, 1.0 / values[i]));}double[] res = new double[queries.size()];for (int i = 0; i < queries.size(); i++) {// 有equations中未定义的节点,可直接返回if (!nodeMap.containsKey(queries.get(i).get(0)) || !nodeMap.containsKey(queries.get(i).get(1))) {res[i] = -1.0;continue;}// 一个点到同一个点if (queries.get(i).get(0).equals(queries.get(i).get(1))) {res[i] = 1.0;continue;}int node1 = nodeMap.get(queries.get(i).get(0));int node2 = nodeMap.get(queries.get(i).get(1));double[] result = new double[nodeCount];Queue<Integer> nodeQueue = new LinkedList<>();result[node1] = 1.0;nodeQueue.add(node1);while(!nodeQueue.isEmpty() && result[node2] == 0) {int startNode = nodeQueue.poll();for (Pair pair : edges[startNode]) {int endNode = pair.node;double edgeVal = pair.value;if (result[endNode] == 0) {result[endNode] = result[startNode] * edgeVal;nodeQueue.add(endNode);}}}res[i] = result[node2] == 0 ? -1 : result[node2];}return res;}
}class Pair {int node;double value;Pair() {}Pair(int node, double value) {this.node = node;this.value = value;}
}

关键点

  • 存储图中节点、边和权值的方法
  • 存储一条边及其权值信息时,由于本题中的图是有方向的,所以不仅要存起点的边权值信息,还要存终点的边权值信息
  • 广度优先遍历的思想

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/137743.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux内核源码分析 (B.4) 深度剖析 Linux 伙伴系统的设计与实现

Linux内核源码分析 (B.4) 深度剖析 Linux 伙伴系统的设计与实现 文章目录 1\. 伙伴系统的核心数据结构2\. 到底什么是伙伴3\. 伙伴系统的内存分配原理4\. 伙伴系统的内存回收原理5\. 进入伙伴系统的前奏5.1 获取内存区域 zone 里指定的内存水位线5.2 检查 zone 中剩余内存容量…

HelpLook全新升级!定制AI问答机器人,企业内容中心焕新

一直以来&#xff0c;企业都在努力解决内外部“企业知识管理”问题&#xff1a;从纸质手册发放&#xff0c;转线上电子文档传阅(pdf/ppt/word等)&#xff0c;再到整理客户常见问题(FAQ)和内部知识库(wiki)&#xff0c;但始终没有找到一套完整方案将“企业知识”很好地集中管理及…

Flutter与Native通信原理剖析与实践

通信原理 我们分几种场景来介绍Flutter和Native之间的通信。 Native发送数据给FlutterFlutter发送数据给NativeFlutter发送数据给Native&#xff0c;然后Native回传数据给Flutter Flutter与Native通信机制 在讲解Flutter与Native之间是如何传递数据之前&#xff0c;我们先了…

PostgreSQL16源码包编译安装

一、安装环境 操作系统&#xff1a;CentOS Linux release 7.8.2003 (Core) PostgreSQL版本&#xff1a;16 服务器IP地址&#xff1a;192.168.0.244 Firewalld关闭、selinux关闭 笔者本次选用最新v16版本进行部署 二、pg数据库安装包下载 下载地址&#xff1a;https://www.po…

什么是IoT数字孪生?

数字孪生是资产或系统的实时虚拟模型&#xff0c;它使用来自连接的物联网传感器的数据来创建数字表示。数字孪生允许您从任何地方实时监控设备、资产或流程。数字孪生用于多种目的&#xff0c;例如分析性能、监控问题或在实施之前运行测试。从物联网数字孪生中获得的见解使用户…

操作系统备考学习 day3 (2.1.1 - 2.1.6)

操作系统备考学习 day3 二、进程与线程2.1 进程与线程2.1.1 进程的概念和特征2.1.2 进程的状态与转换2.1.3 进程的组织2.1.4 进程控制2.1.5 进程间通信&#xff08;IPC&#xff09;2.1.6 线程和多线程模型 二、进程与线程 2.1 进程与线程 2.1.1 进程的概念和特征 进程&#…

怎样获取某个文件的public方法个数

背景&#xff1a;idea 提供的list可以查看所有的构造方法&#xff0c;但是无法直接告诉我准确的数目&#xff0c;于是写了以下一个单独的类 import java.lang.reflect.Method; import java.lang.reflect.Modifier;public class MyPublicMethodCounter {public static void mai…

flink集群与资源@k8s源码分析-集群

0 介绍 本文是flink集群与资源@k8s源码分析系列的第二篇-集群 1 场景 下面详细分析各用例 2 启动k8s集群 k8s集群支持session和application模式,job模式将会被废弃,本文分析session模式集群 Configuration作为配置容器,几乎所有的构建需要从配置类获取配置项,这里不显示…

算法通关村第14关【黄金】| 数据流的中位数

思路&#xff1a;使用一个小根堆一个大根堆来找中位数 小根堆保存较大的一半数字&#xff0c;大根堆保存较小的一半数字 奇数queMin的队头即为中位数&#xff0c;偶数queMin和queMax队头相加/2为中位数 初始状态&#xff1a; queMin: [] queMax: [] 添加数字 1&#xff1a; …

java面试题基础第七天

一、java面试题第七天 1.throw和throws的区别&#xff1f; throw&#xff1a; 用于抛出一个异常对象throws&#xff1a;写在方法体上面&#xff0c;将方法体里面的异常&#xff0c;抛给上层 2. 通过故事讲清楚NIO 下面通过一个例子来讲解下。 假设某银行只有10个职员。该银…

stm32学习-芯片系列/选型

【03】STM32HAL库开发-初识STM32 | STM概念、芯片分类、命名规则、选型 | STM32原理图设计、看数据手册、最小系统的组成 、STM32IO分配_小浪宝宝的博客-CSDN博客  STM32&#xff1a;ST是意法半导体&#xff0c;M是MCU/MPU&#xff0c;32是32位。  ST累计推出了&#xff1a…

buuctf web [极客大挑战 2019]LoveSQL

又是这样的界面&#xff0c;这糟糕的熟悉感&#xff0c;依旧使用上题套路 用户名&#xff1a; admin or 11# 密码&#xff1a; 1 有一串很像flag的字符&#xff0c;但是很可惜&#xff0c;这不是flag 看了一眼源代码&#xff0c;没有可以跳转的页面 要换个思路了&#xff0c…

(二十九)大数据实战——kafka集群节点服役与退役案例实战

前言 本节内容是关于kafka集群节点的服役与退役&#xff0c;从而实现kafka集群的缩容与扩容。在开始本节内容之前&#xff0c;我们要预先安装好kafka集群&#xff0c;并准备一台空余的服务器用来完成我们扩容与缩容的案例。关于kafka集群的安装内容这里不在赘述&#xff0c;相…

Python Web 开发常见的100个问题.pdf

Python被广泛认为是一种容易学习和上手的编程语言&#xff0c;因此对于初学者和有经验的开发者都非常友好。这一特点使得Python成为了许多开发者入门Web开发的首选语言。 在Python Web开发中&#xff0c;开发者们通常会遇到各种各样的问题和挑战。现在我们为大家准备了学习路线…

PostgreSQL快速入门 与MySQL语法比较

开篇 本文可帮助具有MySQL基础的小伙伴对PostgreSQL做一个快速的入门&#xff0c;通过语法之间的差异对比&#xff0c;降低学习成本&#xff0c;同样都是数据库&#xff0c;正所谓触类旁通。 模式的概念 模式&#xff08;Schema&#xff09;表示数据库中的逻辑容器&#xff…

HTML 知识扫盲

写在前面 HTML 是一门超文本标记语言&#xff0c;不管你听没听说过 HTML&#xff0c;但在网上冲浪的途中你无时不刻都在与它接触&#xff0c;他遍布在每个你看得到的互联网的角落。其实对于笔者而言&#xff0c;我已经断断续续地学习过这门语言&#xff0c;经过时间的磋磨&…

docker学习1-基本概念

Docker jar包环境镜像&#xff0c;镜像存在docker仓库中&#xff0c;随用随取&#xff0c;无需现配环境 docker通过隔离机制&#xff0c;各个镜像之间互不干扰 docker比vm轻量化&#xff0c;每次只需运行镜像即可&#xff0c;镜像占内存小启动快&#xff0c;虚拟机启动慢&…

typeof的作用

typeof 是 JavaScript 中的一种运算符&#xff0c;用于获取给定值的数据类型。 它的作用是返回一个字符串&#xff0c;表示目标值的数据类型。通过使用 typeof 运算符&#xff0c;我们可以在运行时确定一个值的类型&#xff0c;从而进行相应的处理或逻辑判断。 常见的数据类型…

Java————List

一 、顺序表和链表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c; 常见的线性表&#xff1a;顺序表、链表、栈、队列… 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直…

ABeam Team Building |「TDC Green Day——夏日Go Green·畅享山海间 环保公益行动」回顾

夏日Go Green畅享山海间 GO!ABeam 夏日Go Green畅享山海间 夏末初秋时节&#xff0c;大连办公室的员工们来到了海滨的望渔山&逃之夭夭海滩&#xff0c;开启了主题为「夏日Go Green畅享山海间」的Team Building之旅。 本次的活动契合了大连办公室作为绿色办公&#xff08;…