news 2026/4/2 10:13:57

day62(1.21)——leetcode面试经典150

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
day62(1.21)——leetcode面试经典150

399. 除法求值

399. 除法求值

我真服了江西这个天气,气死我了,这么冷 想冻死谁 我搁着敲代码手都要冻僵了 气死了 想回学校了 这么冷 谁写的动 真要要被冻死了啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

题目:

题解:

class UnionFind { private final int[] fa; // 代表元 public final double[] mul; // x 的值 * mul[x] = x 的代表元的值 public UnionFind(int n) { fa = new int[n]; // 一开始有 n 个集合 {0}, {1}, ..., {n-1} // 集合 i 的代表元是自己,自己 * 1 = 自己 for (int i = 0; i < n; i++) { fa[i] = i; } mul = new double[n]; Arrays.fill(mul, 1); } // 返回 x 所在集合的代表元 // 同时做路径压缩,也就是把 x 所在集合中的所有元素的 fa 都改成代表元 private int find(int x) { if (fa[x] != x) { int root = find(fa[x]); mul[x] *= mul[fa[x]]; // 更新 x 到其代表元的 mul 值 fa[x] = root; } return fa[x]; } // 判断 x 和 y 是否在同一个集合 public boolean same(int x, int y) { // 如果 x 的代表元和 y 的代表元相同,那么 x 和 y 就在同一个集合 // 这就是代表元的作用:用来快速判断两个元素是否在同一个集合 return find(x) == find(y); } // 合并 from 和 to,新增信息 to / from = value // 其中 to 和 from 表示未知量,下文的 x 和 y 也表示未知量 public void merge(int from, int to, double value) { int x = find(from); int y = find(to); if (x == y) { // from 和 to 在同一个集合,不做合并 return; } // x --------- y // / / // from ------- to // 已知 x/from = mul[from] 和 y/to = mul[to],现在合并 from 和 to,新增信息 to/from = value // 由于 y/from = (y/x) * (x/from) = (y/to) * (to/from) // 所以 y/x = (y/to) * (to/from) / (x/from) = mul[to] * value / mul[from] mul[x] = mul[to] * value / mul[from]; fa[x] = y; } } class Solution { public double[] calcEquation(List<List<String>> equations, double[] values, List<List<String>> queries) { // 把不同字符串映射为不同的数字,方便使用并查集 Map<String, Integer> variableToId = new HashMap<>(); for (List<String> equation : equations) { for (String s : equation) { variableToId.putIfAbsent(s, variableToId.size()); } } // 初始化并查集 UnionFind uf = new UnionFind(variableToId.size()); for (int i = 0; i < equations.size(); i++) { List<String> equation = equations.get(i); uf.merge(variableToId.get(equation.get(1)), variableToId.get(equation.get(0)), values[i]); } // 回答询问 double[] ans = new double[queries.size()]; for (int i = 0; i < queries.size(); i++) { List<String> query = queries.get(i); Integer c = variableToId.get(query.get(0)); Integer d = variableToId.get(query.get(1)); if (c != null && d != null && uf.same(c, d)) { // c * mul[c] = d * mul[d] = 代表元的值 // => c / d = mul[d] / mul[c] ans[i] = uf.mul[d] / uf.mul[c]; } else { ans[i] = -1; } } return ans; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/3 5:42:09

终极指南:零基础部署本地语音合成引擎ChatTTS-ui

终极指南&#xff1a;零基础部署本地语音合成引擎ChatTTS-ui 【免费下载链接】ChatTTS-ui 匹配ChatTTS的web界面和api接口 项目地址: https://gitcode.com/GitHub_Trending/ch/ChatTTS-ui 还在为在线语音合成服务的隐私担忧和高昂费用而烦恼吗&#xff1f;今天我要为你揭…

作者头像 李华
网站建设 2026/4/1 3:02:44

Qwen All-in-One输出后处理:结果解析与展示优化

Qwen All-in-One输出后处理&#xff1a;结果解析与展示优化 1. 为什么需要后处理&#xff1f;——从“能跑通”到“好用”的关键一跃 你可能已经试过 Qwen All-in-One 的 Web 界面&#xff1a;输入一句话&#xff0c;几秒后&#xff0c;屏幕上跳出两行字——一行带表情的判断…

作者头像 李华
网站建设 2026/3/31 4:37:55

为什么你的录屏工具总是不够用?QuickRecorder的7大解决方案揭秘

为什么你的录屏工具总是不够用&#xff1f;QuickRecorder的7大解决方案揭秘 【免费下载链接】QuickRecorder A lightweight screen recorder based on ScreenCapture Kit for macOS / 基于 ScreenCapture Kit 的轻量化多功能 macOS 录屏工具 项目地址: https://gitcode.com/G…

作者头像 李华
网站建设 2026/3/31 3:25:04

如何评估Qwen儿童模型效果?生成质量打分系统部署教程

如何评估Qwen儿童模型效果&#xff1f;生成质量打分系统部署教程 你有没有试过让AI为孩子画一只“穿芭蕾舞裙的小熊”&#xff1f;画面是可爱满分&#xff0c;还是诡异惊吓&#xff1f;对于专为儿童设计的AI图像生成模型来说&#xff0c;光看“能不能生成”远远不够&#xff0…

作者头像 李华
网站建设 2026/4/1 3:05:50

Next AI Draw.io:AI智能图表绘制完全指南

Next AI Draw.io&#xff1a;AI智能图表绘制完全指南 【免费下载链接】next-ai-draw-io 项目地址: https://gitcode.com/GitHub_Trending/ne/next-ai-draw-io Next AI Draw.io是一款革命性的AI增强图表绘制工具&#xff0c;它将传统draw.io的强大功能与现代人工智能技术…

作者头像 李华
网站建设 2026/3/31 23:16:25

SimAI 深度学习集群模拟器:从入门到精通

SimAI 深度学习集群模拟器&#xff1a;从入门到精通 【免费下载链接】SimAI 项目地址: https://gitcode.com/gh_mirrors/si/SimAI 欢迎来到 SimAI 的世界&#xff01;这是一个专为深度学习集群设计的强大模拟器&#xff0c;能够帮助你准确预测和分析大规模AI训练任务中…

作者头像 李华