news 2026/6/5 15:33:02

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/6/6 9:01:49

HY-MT1.5-7B大模型翻译实战|支持术语干预与上下文翻译

HY-MT1.5-7B大模型翻译实战&#xff5c;支持术语干预与上下文翻译 在跨语言交流日益频繁的今天&#xff0c;高质量、低延迟的翻译工具已成为开发者和企业不可或缺的技术支撑。腾讯开源的混元翻译模型HY-MT1.5系列&#xff0c;凭借其出色的翻译质量与灵活部署能力&#xff0c;正…

作者头像 李华
网站建设 2026/5/31 16:21:09

手把手教你用Fun-ASR-MLT-Nano-2512实现多语言字幕生成

手把手教你用Fun-ASR-MLT-Nano-2512实现多语言字幕生成 你有没有遇到过这样的情况&#xff1a;看一段海外访谈视频&#xff0c;听不懂外语&#xff1b;或者手头有一堆跨国会议录音&#xff0c;却因为语言障碍没法快速整理内容&#xff1f;以前处理这类问题&#xff0c;要么靠人…

作者头像 李华
网站建设 2026/6/4 18:49:55

SuperSonic数据分析平台终极指南:快速解决业务数据难题

SuperSonic数据分析平台终极指南&#xff1a;快速解决业务数据难题 【免费下载链接】supersonic SuperSonic是下一代由大型语言模型&#xff08;LLM&#xff09;驱动的数据分析平台&#xff0c;它集成了ChatBI和HeadlessBI。 项目地址: https://gitcode.com/GitHub_Trending/…

作者头像 李华
网站建设 2026/6/5 14:13:00

5步精通melonDS安卓版NDS模拟器:从零开始玩转经典游戏

5步精通melonDS安卓版NDS模拟器&#xff1a;从零开始玩转经典游戏 【免费下载链接】melonDS-android Android port of melonDS 项目地址: https://gitcode.com/gh_mirrors/me/melonDS-android 想要在安卓手机上重温经典的任天堂DS游戏吗&#xff1f;melonDS安卓版NDS模拟…

作者头像 李华
网站建设 2026/5/28 9:24:41

前后端分离语言在线考试与学习交流网页平台系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程

摘要 随着信息技术的快速发展&#xff0c;在线教育平台逐渐成为现代教育的重要组成部分。传统的考试和学习交流方式受限于时间和空间&#xff0c;难以满足学生和教师的多样化需求。尤其是在后疫情时代&#xff0c;远程学习和在线考试的普及进一步凸显了构建高效、稳定、易用的…

作者头像 李华
网站建设 2026/6/1 21:51:51

Folo智能翻译功能:轻松跨越语言障碍的完整指南

Folo智能翻译功能&#xff1a;轻松跨越语言障碍的完整指南 【免费下载链接】follow [WIP] Next generation information browser 项目地址: https://gitcode.com/GitHub_Trending/fol/follow 你是否曾经遇到过这样的情况&#xff1a;在浏览重要的技术文档时发现是日文版…

作者头像 李华