news 2026/4/22 19:21:05

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/17 18:51:22

5分钟学会!Qwen-Image-Edit-2511基础操作速成课

5分钟学会&#xff01;Qwen-Image-Edit-2511基础操作速成课 Qwen-Image-Edit-2511 正在重新定义AI图像编辑的易用性边界&#xff0c;作为 Qwen-Image-Edit-2509 的增强版本&#xff0c;它在保持强大功能的同时大幅提升了稳定性和实用性。本文将带你从零开始快速上手这款多模态图…

作者头像 李华
网站建设 2026/4/22 15:39:34

DeepSeek-R1-Distill-Qwen-1.5B备份与恢复:模型状态持久化策略

DeepSeek-R1-Distill-Qwen-1.5B备份与恢复&#xff1a;模型状态持久化策略 你有没有遇到过这种情况&#xff1a;辛辛苦苦调好一个模型&#xff0c;结果服务器一重启&#xff0c;所有配置和缓存全没了&#xff1f;或者团队协作时&#xff0c;每个人都要重新下载一遍大模型&…

作者头像 李华
网站建设 2026/4/22 10:51:17

3D高斯泼溅技术深度解析:从技术瓶颈到实战突破

3D高斯泼溅技术深度解析&#xff1a;从技术瓶颈到实战突破 【免费下载链接】gsplat CUDA accelerated rasterization of gaussian splatting 项目地址: https://gitcode.com/GitHub_Trending/gs/gsplat 还在为传统3D渲染技术的性能瓶颈而困扰吗&#xff1f;3D高斯泼溅作…

作者头像 李华
网站建设 2026/4/18 3:41:20

Oxc终极指南:Rust驱动的JavaScript工具性能革命

Oxc终极指南&#xff1a;Rust驱动的JavaScript工具性能革命 【免费下载链接】oxc ⚓ A collection of JavaScript tools written in Rust. 项目地址: https://gitcode.com/gh_mirrors/ox/oxc 还在为JavaScript工具链的缓慢速度而烦恼吗&#xff1f;Oxc这个基于Rust构建的…

作者头像 李华
网站建设 2026/4/17 8:11:30

第五人格登录工具完全指南:告别手机扫码的终极解决方案

第五人格登录工具完全指南&#xff1a;告别手机扫码的终极解决方案 【免费下载链接】idv-login idv-login is an IdentityV login tool. 项目地址: https://gitcode.com/gh_mirrors/idv/idv-login 还在为每次登录《第五人格》都要翻找手机、打开APP、对准二维码而烦恼吗…

作者头像 李华
网站建设 2026/4/21 7:41:05

BSHM人像抠图优化建议,输出路径设置技巧

BSHM人像抠图优化建议&#xff0c;输出路径设置技巧 1. 引言&#xff1a;为什么需要关注BSHM人像抠图的使用细节&#xff1f; 你有没有遇到过这种情况&#xff1a;明明模型看起来很强大&#xff0c;结果一跑起来&#xff0c;要么出图模糊&#xff0c;要么保存路径混乱&#x…

作者头像 李华