首页 > 编程知识 正文

leetcode300,leetcode免费吗

时间:2023-05-03 08:12:54 阅读:137409 作者:3399

3359 leet code-cn.com/problems/evaluate-division /

给出表达式A/B=k。 其中a和b是字符串表示的变量,k是浮点数。 根据已知方程求解问题,并返回计算结果。 如果结果不存在,则返回-1.0。

输入始终有效。 除法运算中除数不会为0,可以假设不存在矛盾的结果。

示例 1:

输入: equations=[['a ',' b']、['b ',' c']、values=[ 2.0,3.0 ]、queries=[['a ',' c']、['b '、c ]

输出: [ 6.00000,0.50000,- 1.00000,1.00000,-1.00000]

解释:

给定: a/b=2.0,b/c=3.0

问题: a/c=?b/a=?a/e=?a/a=?x/x=?

返回: [ 6.0,0.5,- 1.0,1.0,-1.0 ]

示例 2:

输入: equations=[['a ',' b']、['b ',' c']、['bc ',' cd']、values=[ 1.5,2.5,5.0 ]、queries=[

输出: [3.75000、0.40000、5.00000、0.20000]

首先,读完主题后,需要直观地找出各变量之间的关系,计算各变量的值,最后根据queries求出值。

例如,在示例1中,a/b=2.0,b/c=3.0,可以利用这种关系找到满足这两个等式的解。 首先处理a/b=2.0。 因为a和b都是第一次相遇,所以为了容易计算,假设b=1.0,则a=2.0,然后处理b/c=3.0。 此时,由于b已经设定了值1.0,所以c=1.0/3.0。

然后我们就可以开心地计算了。

但是此处理方法只能计算相对简单的case,如['a ',' b']、['e ',' f']、['b ',' e']。 复杂的情况下,因为是b所以传球!

解法1 )邻接表dfs实际再仔细观察一下,就知道对于 queries 中能得到结果的等式,它的除号两边的变量都能直接找到关联或能通过一些中间变量来找到关联。 这样,您就可以使用名为3358www.Sina.com/的数据结构保存此关系!

针对,制作了用于观察的图。 用边权表示这两个数的商,如a/b=2.0,b/a=1/2.0

这样,对图上任意两点的商,如a/c=a-b-c=2.0 * 3.0那样,乘以两点间的路径权重即可

图中常用的存储结构有两种,邻接矩阵和邻接表,这里选择使用示例1

但是,由于很久没有写图形算法了,邻表的定义方法很模糊,依靠对邻表的回忆,利用map array完成了邻表的制作。

将“map”用作顶点表以存储所有顶点,然后对一个顶点使用阵列存储与其连接的所有边。

因此,对于邻接表,保存的相邻表如下所示:

map(3) ) a )=[(b ),2 ) ],b )=[ (a ),0.5 ),[c ),3],c )=[(b ),0.333333333333333 ]。

varcalcequation=function (equations,values,queries ) { let map=new Map ),res=[]; let visit=new Map (; //visit数组标记在搜索时访问过constdfs=(src,dst ) /,且找到目标节点时返回1.0,则返回if(src===dst ) { return 1.0; }letadjs=map.get(src ); 遍历//src的所有边缘,如果没有访问过,则调用dfs获取路径积for (leti=0; i adjs.length; I ) { let next=adjs[i]; if (! visit.get(next[0] ) visit.set ) next[0],true; letret=DFS(next[0],dst ); visit.set(next[0],false ); 如果能够达到//dst,则返回当前边权与后续边权积ret的乘积if(ret )!=-1.0 (返回next [1] * ret; }//否则,无法到达。 返回- 1.0返回- 1.0; (; //创建邻表for (leti=0; i equations.length; I ) { let e=equations[i],v=values[i]; if (! map.has(e[0] ) ) map.set ) e[0],[]; visit.set(e[0],false ); (if (! map.has(e[1] ) ) map.set ) e[1],[]; visit.set(e[1],false ); }letadj1=map.get(e[0]; letadj2=map.get(e[1]; ADJ1.push([e[1],v]; ADJ2.push([e[0],1/v]; }for(letqofQueries ) { let n0=q[0],n1=q[1]; if(map.has(N0 ) map.has (n1 ) ) visit.set (n0,true ); RES.push(DFS(N0,n1 ); visit.set(N0,false ); }else{RES.push(-1.0 ); } } return res; (;

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。