【LeetCode】399. 除法求值 并查集

解锁 STP 与 SOLIDWORKS 转换密码:工具及迪威在线转换秘籍 STP 文件能够完整地记录 3D 模型的几何形状、尺寸、公差、材料属性等丰富信息,无论是简单的机械零件,还是复杂的装配体,都能精准呈现。而在线转换以迪威模型为例,凭借便捷性、高效性和安全性,为广大 3D 专业技术人员和学生党在无需安装额外软件的情况下,轻松实现格式转换提供了有力支持。在实际工作和学习中,可根据自身具体情况灵活选择合适的转换方式,以确保 3D 设计工作流程的顺畅进行,让创意在不同格式间自由流动并绽放光彩。在 3D 设计与建模的广袤世界里,不同格式文件间的转换常常是连接创意与实现的关键桥梁。 阅读详情

在这里插入图片描述
在这里插入图片描述

这道题目的解法是带权值的并查集。

并查集

可以看这篇文章的讲解:

https://blog.csdn.net/niushuai666/article/details/6662911

并查集由一个整数型的数组和两个函数构成。数组pre[]记录了每个点的前导点是什么,函数find是查找,join是合并

解题思路:建立两个map,一个map存储上一级结点。一个map存储比值。首先不断构建查并集结构。如果两者根节点不一致,进行合并。然后输出最终的结果即可。

在这里插入图片描述

public class Solution {
    HashMap<String, String> path = new HashMap<>();  // key是当前结点,value是父结点
    HashMap<String, Double> value = new HashMap<>();  // key是当前结点,value是父结点/此结点

    public double[] calcEquation(List<List<String>> equations,
                                 double[] values,
                                 List<List<String>> queries) {
        // 这道题目用并查集的方式来求解。
        // 带权值的并查集。
        for (int i = 0; i < values.length; i++) {// 遍历被除数,除数,商。
            String parent = equations.get(i).get(0);
            String child = equations.get(i).get(1);
            double divide = values[i];
            // 首先保证 map中有这两个结点。
            if (!path.containsKey(parent)) {
                path.put(parent, parent);
                value.put(parent, 1.0);
            }
            if (!path.containsKey(child)) {
                path.put(child, child);
                value.put(child, 1.0);
            }
            String root1 = findRoot(parent);// 找到了parent的根节点
            String root2 = findRoot(child);// 找到了,child的根节点
            // 分成两种情况,两者根节点一致;两者根节点不一致。
            // 一致的话,不用管了。不一致的话,进行根节点的合并。
            if(!root1.equals(root2)){
                path.put(root2,root1);
                value.put(root2,divide*value.get(parent)/value.get(child));
            }
        }
        // 现在已经将数据按照并查集的格式存储好了
        double[] res = new double[queries.size()];
        for (int i = 0; i< queries.size(); i++) {
            List<String> query = queries.get(i);
            String s1 = query.get(0);
            String s2 = query.get(1);
            if(!(path.containsKey(s1)&&path.containsKey(s2))){
                res[i] = -1.0;
                continue;
            }
            // 说明 两者都包括
            String root1 = findRoot(s1);
            String root2 = findRoot(s2);
            if(!root1.equals(root2)){
                res[i] = -1.0;
                continue;
            }
            // 说明 两者的根结点一致。
            res[i] = value.get(s2)/value.get(s1);
        }
        return res;
    }

    private String findRoot(String str) {
        // 这个方法能够找到,str的根结点。
        // 并且最终将此结点直接与根节点相连。(设置其value值)
        String save = str;
        double divide = 1.0;
        if (path.get(str).equals(str)) {
            return str;
        }
        // 说明root不是自己。
        while (!path.get(str).equals(str)) {
            // 如果str的父结点 不等于 str
            divide *= value.get(str);
            str = path.get(str);
        }
        divide *= value.get(str);
        path.put(save, str);
        value.put(save, divide);
        return str;
    }


}

GPU微架构演进分析--从SIMT到Scalar-Vector-Tensor计算的混合配比与调度 GPU架构经历了从专用计算模块到统一可编程处理器的演进。传统GPU面临专用电路配比难题,Nvidia Tesla架构通过引入可编程多线程处理器实现图形与计算的统一。Fermi架构进一步向计算倾斜,随后的架构陆续加入Tensor Core等专用单元。AI时代促成了从图形处理主导向AI计算的转变,形成了Scalar+Vector+Tensor的混合计算范式。SIMT调度重要性降低,CUDA面临新挑战,RISC-V等架构可能带来新机遇。 阅读详情

相关推荐

MTK Linux DRM分析(八)- KMS drm_crtc.c

CRTC 在 Linux DRM 子系统中是显示控制的核心,负责时序生成、模式设置和管线的调度。理解其工作原理和 API 对于进行底层图形开发、调试显示问题或 simply understanding how your graphics stack works 都至关重要。

iTom1900 1306

leetcode-399

并查集

qq_62999892的博客 255

从零搭建 C# + YOLO 工业视觉系统:从模型训练到上位机部署(工业级落地)

做工业质检、自动化生产线的同学都懂:一套能用的工业视觉系统,既要“检测准”,又要“界面易操作”,还要“部署稳”。之前帮某电子厂做PCB缺陷检测,一开始用Python+YOLO做检测核心,QT做上位机,结果踩了无数坑:Python推理速度波动大,QT和Python跨语言集成繁琐,数据传递容易卡顿;后来换成C# + YOLO的组合,直接打通了“模型训练-上位机开发-工业部署”全流程——C#的WinForms/WPF开发上位机高效,工业相机SDK支持完善;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 704

Leetcode399除法求值(弗洛伊德法 超详细注释)

目录 1.题目描述: 2.思路: 3.详细代码 1.题目描述: 给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi = values[i] 。每个 Ai 或 Bi 是一个表示单个变量的字符串。 另有一些以数组 queries 表示的问题,其中 queries[j] = [Cj, Dj] 表示第 j 个问题,请你根据已知条件找出 Cj / Dj = ?

敲敲敲 5206

399. Evaluate Division刷题笔记

参考了这篇回答 class Solution: def calcEquation(self, equations: List[List[str]], values: List[float], queries: List[List[str]]) -> List[float]: graph = {} for i in range(len(equations)): if equations[i][0] in graph:

weixin_44737922的博客 291

Leetcode 399. 除法求值 【离散化并查集

给你一个变量对数组equations和一个实数值数组values作为已知条件,其中和values[i]共同表示等式。每个Ai或Bi是一个表示单个变量的字符串。另有一些以数组queries表示的问题,其中表示第j个问题,请你根据已知条件找出的结果作为答案。返回。如果存在某个无法确定的答案,则用-1.0替代这个答案。如果问题中出现了给定的已知条件中没有出现的字符串,也需要用-1.0替代这个答案。输入总是有效的。你可以假设除法运算中不会出现除数为 0 的情况,且不存在任何矛盾的结果。

Don_tknowwhat的博客 1217

leetcode-399. 除法求值

3.1)遍历图中该节点的连接点,如果等于尾节点,则返回当前权重;如果不等于,则dfs深度优先遍历,当前节点和尾节点,找到其关系。2)遍历queries,创建一个数组,用来记录当前元素是否遍历过【因为尾是一样的,头在遍历,没有意义】1)先通过defaultdict创建一个图,a/b=v,b/a=1/v,都保存到字典中。如果问题中出现了给定的已知条件中没有出现的字符串,也需要用。3.2)如果找到的权重值不为-1,则相乘,否则返回-1。未在等式列表中出现的变量是未定义的,因此无法确定它们的答案。

曼巴的博客 793

力扣399除法求值】【并查集

判断两个节点是否在一个集合里,通过两个节点的根节点判断 code 注意事项 我在写这道题的时候在这个地方犯了错

qhu1600417010的博客 264

带权并查集Leetcode 399 除法求值

带权并查集Leetcode 399 除法求值 问题: 思路: 构建带权值边的并查集,对于每个方程式有两种情况: 查询是否联通,若不联通,则答案为-1.0 若联通,则求出其与根相除的结果,根据结果计算方程式。 例如,对于题目示例: 构造并查集:a->b->c,其中a->b的边的权值为2.0,b->c的边的权值为3.0 以计算b/a时为例,以root结点为桥梁,计算b/a的值: 首先计算b/root,这里root为c,则b/c = 3.0 然后计算a/root,这里root为c,则a

qq_44709990的博客 284

Leetcode-399. 除法求值 Evaluate Division (并查集Union-Find) -超详细python

题目 给出方程式 A / B = k, 其中 A 和 B 均为用字符串表示的变量, k 是一个浮点型数字。根据已知方程式求解问题,并返回计算结果。如果结果不存在,则返回 -1.0。 链接:https://leetcode.com/problems/evaluate-division/ Equations are given in the format A / B = k, where A and B are variables represented as strings, and k is a rea

JamieLuo的博客 478

leetcode-42】【并查集399. 除法求值

题目描述 给出方程式 A / B = k, 其中 A 和 B 均为用字符串表示的变量, k 是一个浮点型数字。根据已知方程式求解问题,并返回计算结果。如果结果不存在,则返回 -1.0。 输入总是有效的。你可以假设除法运算中不会出现除数为 0 的情况,且不存在任何矛盾的结果。 示例 1: 输入:equations = [[“a”,“b”],[“b”,“c”]], values = [2.0,3.0], queries = [[“a”,“c”],[“b”,“a”],[“a”,“e”],[“a”,“a”],[“x

u010659877的专栏 270

LeetCode每日一题--399. 除法求值(广度优先搜索 动态规划 带权并查集

题目:跳转至 399. 除法求值 思路: 题目跟猜谜一样,对照示例进行理解,涉及到图就不灵光。

qq_39295095的博客 262

LeetCode 399. 除法求值(并查集+BFS)

把各个string看做顶点。然后a/b的值看做边。对于每个查询a/b,我们要求的就是从a到b的一条路径,答案就是这条路径上的边权之积。我用的是BFS 代码如下: class Solution { public: unordered_set<string>st; //存放顶点的集合 map<pair<string,string>,double>mp...

weixin_43175029的博客 673

leetcode 990等式方程的可满足性、399除法求值并查集

给定一个由表示变量之间关系的字符串方程组成的数组,每个字符串方程的长度为4"a==b"或"a!=b"。在这里,a 和 b 是小写字母(不一定不同),表示单字母变量名。只有当可以将整数分配给变量名,以便满足所有给定的方程时才返回true,否则返回false。示例 1:输入:["a==b","b!=a"]输出:false解释:如果我们指定,a = 1 且 b = 1,那么可以满足第一个方程,但无法满足第二个方程。没有办法分配变量同时满足这两个方程。

qq_60461973的博客 1176

leetcode-399.除法求值并查集

题目 这道题要是不知道并查集的方法还可以通过DFS或BFS来做,这也是我第一次在leetcode遇到图相关的题目,很有意义!事实上题中的相除关系可以通过图的方式来表达,而queries中的求商可以通过求换算关系来得到,比如求a/d,那么我们要是能够将a和d都换算成相同的中间变量即可! 我们可将a/b = 2.0变为两个顶点和一个边的关系来表示,a—>b,权重为2; 那么再加上b/c = 3.0,将图扩展为a—>b—>c,权重分别为2.0,3.0。那么当我们要求a/c的值的时候,只需要求a

weixin_40710708的博客 471

leetcode399. 除法求值

其中 parent[a] = b 表示:结点 a 的(直接)父亲结点是 b,与之对应的有向边的权重,记为 weight[a] = 2.0,即 weight[a] 表示结点 a 到它的 直接父亲结点 的有向边的权重。通过示例1的分析,我们知道了,题目给出的equations 和 values可以表示成一个图,equations 中出现的变量就是图的顶点,[分子]于「分母」的比值可以表示成一个有向关系(因为「分子」和「分母」是有序的,不可以对换),并且这个图是一个带权图,values 就是对应的有向边的权值。

OceanStar的博客 672

LeetCode399.除法求值(Evaluate Division)——分析及代码(C++)

二、分析及代码 1. 并查集 本题中所给的方程式具有传递性,因此可以结合并查集方法,将各组关联的字符放到一个集合中并确定传递关系,从而快速求解。 结合等式特点,并查集中设计两个哈希表,分别记录各字符对应的父节点和权重值。 初始化时,各字符对应节点的父节点为自身,权重值为1。 根据方程式合并并查集,并进行路径压缩,将除数集合中除数以上的节点和被除数集合中被除数以上的节点压缩到被除数的父节点上。 最后根据问题方程式,在并查集中查找计算权重即可。

江南土豆的博客 587

LeetCode 399 除法求值

这道题其实挺有意思的,它不是让你去做真正的除法,而是让你去“推理”不同变量之间的关系。

记录从移动端、鸿蒙到物联网与AI的完整实战与思考。专注于分享可复用的工程方案与产品思维,尤其深入鸿蒙生态与全栈开发。以十年工程与管理沉淀,为你提供清晰的技术纵深路径。坚信技术的价值在于“贯通”与“落地”。 1350

Leetcode刷题篇】leetcode399 除法求值

给出方程式 A / B = k, 其中 A 和 B 均为用字符串表示的变量, k 是一个浮点型数字。根据已知方程式求解问题,并返回计算结果。如果结果不存在,则返回 -1.0。 输入总是有效的。你可以假设除法运算中不会出现除数为 0 的情况,且不存在任何矛盾的结果。 示例 1: 输入:equations = [[“a”,“b”],[“b”,“c”]], values = [2.0,3.0], queries = [[“a”,“c”],[“b”,“a”],[“a”,“e”],[“a”,“a”],[“x.

Mind_programmonkey的博客 555

leetcode 399-除法求值

在合并以后,产生了一棵高度为 3 的树,那么我们在执行查询的时候,例如下图展示的绿色结点和黄色结点,绿色结点并不直接指向根结点,在计算这两个变量的比值的时候,计算边的权值的比值得到的结果是不对的。因此可以用它们指向根结点的有向边的权值的比值作为两个变量的比值。中出现的变量就是图的顶点,「分子」与「分母」的比值可以表示成一个有向关系(因为「分子」和「分母」是有序的,不可以对换),并且这个图是一个带权图,由于有「路径压缩」的优化,两个在一个连通分量中的不同变量,它们分别到根节点的权值的比值就是要求的结果。

qq_45069496的博客 473

leetcode 399

leetcode 399

weixin_42702885的博客 203

Leetcode399 场周赛题解

Leetcode399 场周赛题解

ProgramNovice的博客 619

基于Vuejs与Cesium框架构建的智慧园区三维可视化管理系统_集成前端开发技术栈与三维地理信息系统组件_实现园区建筑设施设备人员车辆的实时监控与数据分析功能_支持热重载开发环.zip

基于Vuejs与Cesium框架构建的智慧园区三维可视化管理系统_集成前端开发技术栈与三维地理信息系统组件_实现园区建筑设施设备人员车辆的实时监控与数据分析功能_支持热重载开发环.zip

西南民族大学EDA重点总结

西南民族大学EDA复习重点总结总结西南民族大学 EDA 可编程逻辑 总结

上一篇: 【LeetCode】337. 打家劫舍 III
下一篇: 【LeetCode】6个股票问题
Mason97
博客等级 码龄7年 41粉丝 344原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值