【并查集】LeetCode 990. 等式方程的可满足性
题目链接
思路
并查集模板题,模板可以参考 常用算法模板。将字母视为结点,==
表示有路径,!=
表示无路径。
- 遍历
x == y
,建立图前驱关系 - 遍历
x != y
,检查是否和前驱关系对应 - 如果不对应,立即返回
false
- 全部遍历完成说明没有问题,返回
true
代码
class Solution {
private int[] pre = new int[26 + 3];
public boolean equationsPossible(String[] equations) {
init(26);
// build graph
for(String equation : equations){
if(equation.charAt(1) == '!'){
continue;
}
int indexFrom = equation.charAt(0) - 'a';
int indexTo = equation.charAt(3) - 'a';
mix(indexFrom, indexTo);
}
for(String equation : equations){
if(equation.charAt(1) == '!'){
int indexFrom = equation.charAt(0) - 'a';
int indexTo = equation.charAt(3) - 'a';
if(find(indexFrom) == find(indexTo)){
return false;
}
}
}
return true;
}
void init(int n) {
for(int i = 0; i < n; i++){
pre[i] = i;
}
}
private void mix(int a, int b) {
int fa = find(a);
int fb = find(b);
if(fa != fb){
pre[fb] = fa;
}
}
private int find(int x) {
int r = x;
while(r != pre[r]){
r = pre[r];
}
merge(r, x);
return r;
}
private void merge(int r, int x) {
int i = x, j;
while(pre[i] != r){
j = pre[i];
pre[i] = r;
i = j;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了