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/3/31 13:57:08

YOLO11 + Ultralytics,5分钟开启训练之旅

YOLO11 Ultralytics&#xff0c;5分钟开启训练之旅 1. 快速上手&#xff1a;从零开始你的目标检测训练 你是否还在为搭建YOLO环境而烦恼&#xff1f;配置依赖、版本冲突、CUDA安装失败……这些问题常常让初学者望而却步。现在&#xff0c;这一切都成为过去式。 借助 YOLO11…

作者头像 李华
网站建设 2026/3/26 22:56:15

Diffusers终极指南:从零开始掌握AI图像生成的10个核心技巧

Diffusers终极指南&#xff1a;从零开始掌握AI图像生成的10个核心技巧 【免费下载链接】diffusers Diffusers&#xff1a;在PyTorch中用于图像和音频生成的最先进扩散模型。 项目地址: https://gitcode.com/GitHub_Trending/di/diffusers Diffusers是Hugging Face推出的…

作者头像 李华
网站建设 2026/3/27 6:54:13

PowerToys Image Resizer终极指南:批量图片尺寸调整的完整教程

PowerToys Image Resizer终极指南&#xff1a;批量图片尺寸调整的完整教程 【免费下载链接】PowerToys Windows 系统实用工具&#xff0c;用于最大化生产力。 项目地址: https://gitcode.com/GitHub_Trending/po/PowerToys 作为一名长期处理大量图片素材的设计师&#x…

作者头像 李华
网站建设 2026/4/1 23:26:24

LearnGitBranching完全指南:可视化掌握Git分支管理

LearnGitBranching完全指南&#xff1a;可视化掌握Git分支管理 【免费下载链接】learnGitBranching An interactive git visualization and tutorial. Aspiring students of git can use this app to educate and challenge themselves towards mastery of git! 项目地址: ht…

作者头像 李华
网站建设 2026/3/27 11:13:32

GPT-OSS-20B未来会支持多模态吗?社区发展展望

GPT-OSS-20B未来会支持多模态吗&#xff1f;社区发展展望 你有没有想过&#xff0c;一个能在笔记本上本地运行、推理效果接近GPT-4的开源模型&#xff0c;未来能不能“看见”世界&#xff1f; 这正是当前围绕 GPT-OSS-20B 最热门的讨论之一。随着越来越多开发者将这个轻量级但…

作者头像 李华
网站建设 2026/3/28 10:19:06

Glyph模型不适合做什么?这些限制要了解

Glyph模型不适合做什么&#xff1f;这些限制要了解 1. 引言&#xff1a;Glyph不是万能的OCR解决方案 你有没有遇到过这样的情况&#xff1a;一张老照片上的文字模糊不清&#xff0c;或者扫描件里的小字号几乎看不出来&#xff1f;这时候&#xff0c;传统OCR工具往往束手无策。…

作者头像 李华