leetcode399 Evaluate Division

ArcGIS基础:点要素分割线要素和提取线要素的交点 第一个实验:【点要素分割线要素】看下原始数据:下图所示,2个红点和一条绿线,用2个点去分割这条线。 找到【数据管理工具】,在找到【要素】,再找到【在点处分割线】,如下图所示。 输入线、点要素,然后在【搜索半径】里输入5米,查看一下结果。 查看结果发现,线段被分割了2段,我们查看一下原因。 发现第2个点与线有一段距离,肯定是大于5米的,所以分割没有成功。可以量测一下距离,重新输入搜索半径。 我们把搜索半径改为200米,勘察结果,被点分割了3段。 接下来使用另外一个工具【在折点处分割线】,如下所示。 阅读详情

题目描述:
Equations are given in the format A / B = k, where A and B are variables represented as strings, and k is a real number (floating point number). Given some queries, return the answers. If the answer does not exist, return -1.0.

Example:
Given a / b = 2.0, b / c = 3.0.
queries are: a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ? .
return [6.0, 0.5, -1.0, 1.0, -1.0 ].

The input is: vector

equations = [ ["a", "b"], ["b", "c"] ],
values = [2.0, 3.0],
queries = [ ["a", "c"], ["b", "a"], ["a", "e"], ["a", "a"], ["x", "x"] ]. 

The input is always valid. You may assume that evaluating the queries will result in no division by zero and there is no contradiction.

说是一道除法计算的题,其实是一道图算法的题目。将每个变量看做是一个节点,a/b=2.0,表示从a到b有一条路,这条路有一个值2.0。一个除法查询就是判断从一个节点到另外一个节点有没有通路,将经过的每条路的值相乘即得到结果,例如a/c=a/b*b/c。
首先我们根据给出的等式构建出这个图,然后通过dfs来解出每个查询的结果。利用c++的各类stl可以让编程更加方便。以下是代码:

class Solution {
private:
    vector<vector<pair<int, double>>> all;
public:

    double dfs(int a, int b) {
        queue<int> q;
        q.push(a);
        //记录a除以其他点的结果
        vector<double> dis(all.size(), 1.0);
        //记录其他的点是否被访问过
        vector<bool> isVisit(all.size(), 0);
        while (!q.empty()) {
            int u = q.front();
            q.pop();
            for (int i = 0; i < all[u].size(); i++) {
                int x = all[u][i].first;
                double y = all[u][i].second;
                if (isVisit[x]==1) {
                    continue;
                }
                dis[x] = dis[u] * y;
                if (x == b) {
                    return dis[x];
                }
                q.push(x);
                isVisit[x] = 1;
            }
        }
        return -1;
    }
    vector<double> calcEquation(vector<pair<string, string>> equations, vector<double>& values, vector<pair<string, string>> queries) {
        //convert all edges to number
        map<string, int> edges;
        //the whole map
        //vector<vector<pair<int,double>>> all;

        for (int i = 0; i < equations.size(); i++) {
            string x = equations[i].first, y = equations[i].second;
            if (edges.count(x) == 0) {
                edges[x] = all.size();
                vector<pair<int, double>> temp;
                all.push_back(temp);

            } 
            if (edges.count(y) == 0) {
                edges[y] = all.size();
                vector<pair<int, double>> temp;
                all.push_back(temp);
            }
            all[edges[x]].push_back({ edges[y],values[i] });
            all[edges[y]].push_back({ edges[x],1 / values[i] });
        }
        vector<double> results;
        for (int i = 0; i < queries.size(); i++) {
            string a = queries[i].first, b = queries[i].second;
            //cout << a << b << endl;

             if (edges.count(a) == 0 || edges.count(b) == 0) {
                results.push_back(-1.0);
            } else if (a == b) {
                results.push_back(1.0);
            }
            else {
                int ap = edges[a], bp = edges[b];
                double re = dfs(ap, bp);
                results.push_back(re);
            }
        }
        return results;
    }
};

当然这个解法并不是最优的,因为每次查询都需要做一次dfs,每次查询需要哦o(n+e)的复杂度。另外有一个解法是在一开始就将图里面可以得到的结果全都计算出来。每次查询只需要o(1)的复杂度。

GDI文字绘制和windows下opengl文字绘制小结 GDI绘制文字,要设置文字的属性,主要就是通过设置DC中的font对象来实现的。 font对象的创建可以由createfont()、createfontIndirect()来实现。 HFONT CreateFont( int nHeight, // height of font int nWidth, // average 阅读详情

相关推荐

一分钟学会MATLAB-数据清洗(含完整代码)

数据清洗是数据分析过程中的一个重要步骤,目的是提高数据的质量,以便进行更有效的分析。% 删除超出阈值的行。% 用线性插值填充缺失值。% 删除包含缺失值的行。% 找到缺失值的位置。% 可视化数据,识别异常值。缺失值是数据清洗中常见的问题。通过以上步骤,你可以有效地清洗数据,使其准备好进行后续的分析和建模。

2402_87132195的博客 3316

Leetcode第399题除法求值(弗洛伊德法 超详细注释)

目录 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 = ?

敲敲敲 5209

Apollo MPC横纵向耦合控制学习笔记

Apollo MPC横纵向控制原理学习笔记

weixin_39199083的博客 1万+

leetcode-399

并查集

qq_62999892的博客 255

ThreeJS教程:地图案例(包围盒、正投影)

推荐:将加入你的3D工具链。

jianshi2023的博客 1007

逆变器专题(6)-正负序分离(二阶广义积分器DSOGI)

相应仿真原件请移步资源下载DSOGI作为一种常用的正负序分离方法,其可以在电压三相不平衡的状态下实现较为精准的锁相环。

cyc19980105的博客 8803

leetcode:399. 除法求值

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

OceanStar的博客 679

数学建模传染病模型_【数学建模】之传染病模型

点击【拇指笔记】,关注我的公众号。SE模型缺点:没有考虑接触到的人中还有一部分病人,所以所有人并不会全部被感染。建立模型:已感染人数(病人)每个病人每天有效接触(足以使人致病)人数为根据(1)(2)可以建立模型:等式两边同时除以\Delta t由导数定义有同时,取\Delta t = 1天由(1)(5)两式可得最终的模型:Logistic模型缺点:区分已感染者(病人)和未感染者(健康人)...

weixin_39590453的博客 2227

leetcode-399. 除法求值

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

曼巴的博客 795

FISCO BCOS(一)———搭建单群组FISCO BCOS联盟链

1、安装ubuntu依赖 sudo apt install -y openssl curl 2、创建操作目录, 下载安装脚本 创建操作目录 cd ~ && mkdir -p fisco && cd fisco 下载脚本 curl -#LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v2.8.0/build_chain.sh && chmod u+x build_chain.

林中有神君 6649

基于Python实现人脸识别相似度对比

随着人工智能技术的不断进步,人脸识别成为了一种广泛应用的技术。人脸相似度对比是其中的一个重要应用场景,可以用于人脸搜索、身份验证等方面。本文将介绍如何使用Python实现人脸相似度对比。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 9808

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

黑猫带你学eMMC协议第2篇:eMMC部分相关名词释义

1 前言 1.1 声明 本文依据eMMC JEDEC5.1、网络资料及个人工作经验整理而成,如有错误请留言。 本文结合eMMC JEDEC5.1协议手册查看效果更佳。 1.2 本文背景 本文关键词不包括emmc jedec5.1协议第3章节:《Terms and definitions》内容。关于emmc协议层的关键词,直接查阅spec相关章节即可,清晰明了,此处没必要再列出。 本文为本人工作学习中常听到或常用到关乎于emmc/flash的一些关键词合集,没有固定分类,不需要强行记忆,供查询使用。 1.

黑猫奥利奥的博客 7432

leetcode题解:第399题Evaluate Division

https://leetcode-cn.com/problems/evaluate-division/ 分析 这道题的目的很明确,逻辑也容易理解,人可以很容易地计算出这种方程式的结果,但怎么把这种方程式在程序中表示是一个难题。换言之,正确地表示方程式,就能把这个看似难处理的问题转换成容易解决的问题。 解法一、图遍历 如果给出提示,把这题与图联系起来,能否快速找到解决办法呢? 我们可以很自然地想到,可以用带权图来表示输入的所有方程式:a / b = value表示两条边:a->b,权重为value和b-

chenf1999的博客 426

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Leetcode 399. Evaluate Division

Leetcode 399. Evaluate Division "a"-(2)->"b" "b"-(1/2)-->"a"-(3)->"c" 深度优先搜索: import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Set; public

独钓寒江雪 466

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LeetCode: 399. Evaluate Division

LeetCode: 399. Evaluate Division

qq_16318319的博客 989

【Leetcode】399. Evaluate Division

题目链接:https://leetcode.com/contest/4/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 real number (flo

业精于勤,荒于嬉 5481

【LeetCode】399. Evaluate Division 解题报告(Python)

【LeetCode】399. Evaluate Division 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/delete-and-ear...

负雪明烛 3738

LeetCode Top 100 Liked Questions 399. Evaluate Division (Java版; Medium)

welcome to my blog LeetCode Top 100 Liked Questions 399. Evaluate Division (Java版; Medium) 题目描述 Equations are given in the format A / B = k, where A and B are variables represented as strings, and k i...

littlehaes的博客 193

Leetcode 399 Evaluate Division

Leetcode 399 Evaluate Division Union-Find solution Union Find DFS DFS Does the direction of an edge matters? – Yes. Take a / b = 2 for example, it indicates a --2–> b as well as b --1/2–> a. /...

weixin_43876597的博客 84

LeetCode 399. Evaluate Division

399. Evaluate Division Equations are given in the format A / B = k, where A and B are variables represented as strings, and k is a real number (floating point number). Given some queries, return the ...

WXM 231

LeetCode 399 Evaluate Division

399 Evaluate Division https://leetcode.com/problems/evaluate-division/ You are given an array of variable pairs equations and an array of real numbers values, where equations[i] = [Ai, Bi] and values[i]represent the equation Ai / Bi = values[i]. Each Ai or

cyberickk blog 163

[leetcode] 399. Evaluate Division 解题报告

题目链接: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 real number (floating point num

小榕流光的专栏 3610

Leetcode Algorithm 399. Evaluate Division

Leetcode Algorithm 399. Evaluate Division 给定一系列形如A/B=k的等式,其中A,B是字符串类型的变量,k是一个实数,求某个新算式A’/B’的值。如果值不存在,则返回-1

Law’s Blog 516

LeetCode399 Evaluate Division

399 Evaluate Division: this question seems pretty odd for being catagorized in graph. so this problem is basically given a set of equations, and given a set of queries, return the query results in array. Example: equations = [ [“a”, “b”], [“b”, “c”] ], val

Tech in Pieces 329

[leetcode]399. Evaluate Division

[leetcode]399. Evaluate Division

New coder, Step further 733
上一篇: leetcode 17. Letter Combinations of a Phone Number
下一篇: LeetCode684 Redundant Connection
wenkun97
博客等级 码龄10年 15粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值