每日一题算法:2020年6月8日 等式方程的可满足性 equationsPossible

这篇博客介绍了如何解决一道关于等式方程的可满足性问题。作者通过构建关系图来判断是否存在矛盾的等式,利用广度优先搜索算法检查不等式关系。尽管最初采用的图解法导致了高复杂度,但作者认识到并查集数据结构可能是更优的解决方案,它可以更有效地判断不同节点是否属于同一集合,从而降低复杂度。
摘要由CSDN通过智能技术生成

2020年6月8日 等式方程的可满足性 equationsPossible

在这里插入图片描述

默认格式;

class Solution {
   
    public boolean equationsPossible(String[] equations) {
   

    }
}

解题思路:

这道题,感觉就是题目比较难理解,题目的意思是,在这个数组中不存在矛盾的等式关系,比如a==b,b==c,但是c!=a,这就存在一个矛盾,这种情况输出false。

这题的关键点在于!=,只有!=才会产生矛盾,所以我的想法是,使用图,把数组转变为一张关系图,所有相等的都连接起来
在这里插入图片描述
然后我们判断c!=d如何判断是否正确,直接在c所在的关系中广度优先算法搜索是否存在d,如果不存在,则表示确实是不相等的,但是如果存在,则表示存在矛盾,输出false。

昨天刚刚学了图和广度优先搜索算法,今天就找到了练习的机会,绝对不能放过。

第一步,根据字符串数组构建图

虽然可以在构建图的同时就判断是否存在矛盾,但是我觉得暂时还是先完成图之后判断,循序渐进。

一遍写出没有bug的代码,虽然有点慢,但是可以优化
在这里插入图片描述

public boolean equationsPossible(String[] equations) {
   
    HashMap<Character, HashSet<Character>> map=new HashMap<>();

    //构建图
    for(int i=0;i<equations.length;i++){
   

        //判断是不是等式,如果是等式,构造图连接
        if ((equations[i].charAt(1))=='='){
   

            //如果是还不存在,就新插入一个,如果已经存在,就添加一个节点
            if (map.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值