【LeetCode75】第四十六题 除法求值

news2024/11/29 18:37:10

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

 题目给我们多个二维数组形式的除法等式,在二维数组里有两个字符串,表示同名的未知数,另一个数组中对应索引的值就是这两个未知数相除的结果。然后再给我们一个以两个未知数为一组的二维数组,让我们根据之前的未知数等式来解开这些未知数相除的结果。

那么乍一看还挺唬人,传入的参数比较多,测试用例看着也比较花。

其实就是让我们解出等式的值,解不出的置为-1。

那么首先我们根据给的条件,只能得出两个未知数的倍数关系,因为未知数a除未知数b等于一个值n,那么未知数a就是等于n倍的未知数b,而未知数b就等于是1/n倍的未知数a。

所以要解未知数等式,我们就需要寻找这两个位置共同拥有的一个未知数的倍数关系,例如一个a等于两个b,一个b等于三个c,那么一个a就等于6个c。

我们先定义一个map,键为未知数,值为pari<string,int>类型,表示未知数是n倍的另一个未知数。

遍历完题目给的等式,我们就把能获取到的倍数关系都存到map里了。

接着就是开始求解等式,因为我们存倍数关系是双向存的,所以在求解的时候,我们只需要将未知数等式中的任意一个未知数转换为另一个未知数即可,例如代码里我将第一个未知数转为n个第二个未知数,那么除法求值的结果就是n。

那最后的问题就是我们应该如何将未知数转变为另一个未知数,这里我们需要用到DFS,去寻找每一个和第一个未知数有关的倍数未知数,同时再从这些有关的倍数未知数里再去寻找和目标未知数有倍数关系的未知数,我们这边要注意的是,这样寻找绝对会重复寻找同一个未知数进而进入死循环,因此我们要用一个set来存放已经被我们查找过的未知数,如果查找过我们就不再重复去查找了。

如果最后找不到对应的倍数关系,我们就返回double类型的最小值来表示找不到,因为大概率是不会刚好有未知数的倍数关系就是double类型的最小值的,所以我们用它来做标记。

最后将最终结果返回即可。

代码:

lass Solution {
public:
    unordered_map<string,vector<pair<string,double>>>M;   //记录每个字母的等价字母
    double Find(string root,string target,unordered_set<string> &pass){
        for(auto &v:M[root]){   //寻找未知数是否和目标未知数有倍数关系
            if(pass.find(v.first)==pass.end()){ //如果不在去重集合里就开始寻找.
                if(v.first==target) return v.second;
                pass.insert(v.first);
                double num=Find(v.first,target,pass);
                if(num!=DBL_MIN) return num*v.second;
            }
        }
        return DBL_MIN; //找不到目标未知数的相关倍数就返回double的最小值来作为找不到的标记
    }

    vector<double> calcEquation(vector<vector<string>>& equations, vector<double>& values, vector<vector<string>>& queries) {
        for(int i=0;i<equations.size();i++){    //遍历关系,塞进关系表里
            if(M.find(equations[i][0])==M.end()){   //如果关系表里没有对应的未知数,那么存入自身,倍数为1
                M.insert(make_pair(equations[i][0],vector<pair<string,double>>(1,make_pair(equations[i][0],1))));
            }
            if(M.find(equations[i][1])==M.end()){
                M.insert(make_pair(equations[i][1],vector<pair<string,double>>(1,make_pair(equations[i][1],1))));
            }
            M[equations[i][0]].push_back(make_pair(equations[i][1],values[i])); //将倍数关系存入
            M[equations[i][1]].push_back(make_pair(equations[i][0],1/values[i]));
        }
        vector<double>res(queries.size(),-1);
        unordered_set<string>pass;    //用于去重,不在关系表里重复寻找一个未知数
        for(int i=0;i<queries.size();i++){
            //如果关系表里没有要求的未知数就跳过    
            if(M.find(queries[i][0])==M.end()||M.find(queries[i][1])==M.end()) continue;    
            pass.clear();   //每次都清空一下去重集合
            double num=Find(queries[i][0],queries[i][1],pass);  //寻找第一个未知数是第二个未知数的几倍
            if(num!=DBL_MIN) res[i]=num;
        }
        return res;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/975355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot 集成 Canal 实现监听MySQL表数据

SpringBoot 集成 Canal 准备工作什么是 CanalCanal 在 Spring Boot 中的作用和优势准备工作安装和配置 MySQL 数据库 安装Canal项目集成导入依赖添加配置信息创建监听类测试 准备工作 什么是 Canal Canal 是阿里巴巴开源的基于数据库增量日志解析的数据同步和订阅组件&#x…

写得了代码,焊得了板!嵌入式开发工程师必修之代码管理方案(下)

目录 极狐GitLab嵌入式开发场景解决方案 3.1 高可用部署与灾备 3.2 组织管理 3.3 分支策略 3.4 分支保护 3.5 推送规则 3.6 代码评审 3.7 数据保护 3.8 其他相关 本文来自 武让 极狐GitLab 高级解决方案架构师 &#x1f4a1; 前两篇文章&#xff0c;作者介绍了嵌入式开…

接口自动化测试系列-接入测试平台

测试平台目录 测试平台自建源码 后台核心代码 def add_api(kwags):"""插入api数据"""try:join_info CaseApi(namekwags.get("name"), httpTypekwags.get("httpType"),headerskwags.get("headers") if kwags.ge…

Rhinoceros(犀牛)使用技巧:有关曲线和曲面的分析

Rhinoceros&#xff08;犀牛&#xff09; for Mac破解版是一款功能强大的高级建模软件&#xff0c;可以创建、编辑、分析、提供、渲染、动画与转换 NURBS 线条、曲面、实体与多边形网格。不受精度、复杂、阶数或是尺寸的限制&#xff0c;在本篇文章中&#xff0c;为您介绍的是有…

AI与科学知识共生的桥梁,在未来AI会不会取代大学呢?

原创 | 文 BFT机器人 2023年&#xff0c;随着GPT在各行各业的爆发&#xff0c;“是否能将GPT用于科研场景”成为了一个水到渠成的问题。当ChatGPT超越大部分人类在高考、SAT、美国法考、医考等领域取得令人咋舌的高分后&#xff0c;人们对于GPT驱动科研的兴趣愈发高涨。截止本…

layui表格高度

layui表格的高度设置时使用 height:‘full’ 高度就是表格每个页面的总高度。也可以直接写数值&#xff0c;但是这是定高。 也可以使用 height&#xff1a;“full-数值”&#xff0c;比如 height:full-80 那么就会在表格占据剩余div的时候底部留100px。相当于margin-bottom:10…

【AI测试】python文字图像识别tesseract

[AI测试]python文字图像识别tesseract github官网&#xff1a;https://github.com/tesseract-ocr/tesseract python版本&#xff1a;https://github.com/madmaze/pytesseract OCR&#xff0c;即Optical Character Recognition&#xff0c;光学字符识别&#xff0c;是指通过扫…

骨传导耳机用久了伤耳朵吗?骨传导耳机有什么优势

骨传导耳机用久了不伤耳朵&#xff0c;相对于传统的入耳式耳机来说&#xff0c;对耳朵的压力和损伤较小。由于骨传导技术不直接通过耳道传递声音&#xff0c;而是通过振动将声音传送到内耳&#xff0c;因此相比其他类型的耳机&#xff0c;它在减少听力损伤的风险方面具有优势。…

3月面试华为被刷,准备半年,9月二战华为终于上岸,要个27K不过分吧?

终于二战上岸了&#xff0c;二战华为也并不是说非华为不可&#xff0c;只是觉得心里憋着一口气&#xff0c;这就导致我当时有其他比较好的offer&#xff0c;我也没有去&#xff0c;就是想上岸华为来证明自己,现在也算是如愿了&#xff0c;来跟大伙们分享一下~ 个人情况 我本人…

如何检查Windows 11笔记本电脑电池健康状况

如果你拥有一台运行微软最新操作系统的便携式电脑&#xff0c;那么检查Windows 11笔记本电脑的电池健康状况可能很重要。 电池寿命显然是一件大事&#xff0c;无论你是在最好的商务笔记本电脑上工作&#xff0c;还是在目前市场上最好的游戏笔记本电脑上享受马拉松式的Starfiel…

自然语言处理(七):来自Transformers的双向编码器表示(BERT)

来自Transformers的双向编码器表示&#xff08;BERT&#xff09; BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是一种预训练的自然语言处理模型&#xff0c;由Google于2018年提出。它是基于Transformer模型架构的深度双向&#xff0…

DOM 简介 | 深入了解DOM

目录 一、DOM是什么 二、DOM的访问 三、DOM节点类型 四、DOM的分级 今天我们将了解WEB编程中一个重要的概念DOM&#xff08;Document Object Model&#xff09;文档对象模型&#xff0c;它帮助我们使用JavaScript&#xff08;或其他编程语言&#xff09;操纵文档。 一、DO…

java IDEA文件路径分层级

如下图这样 在设置里找到Compact Middle Packages&#xff0c;去掉勾选就行了

MEMS传感器的原理与构造——单片式硅陀螺仪

一、前言 机械转子式陀螺仪在很长的一段时间内都是唯一的选项&#xff0c;也正是因为它的结构和原理&#xff0c;使其不再适用于现代小型、单体、集成式传感器的设计。常规的机械转子式陀螺仪包括平衡环、支撑轴承、电机和转子等部件&#xff0c;这些部件需要精密加工和…

如何建设一个安全运营中心(SOC)?

然信息安全管理问题主要是个从上而下的问题&#xff0c;不能指望通过某一种工具来解决&#xff0c;但良好的安全技术基础架构能有效的推动和保障信息安全管理。随着国内行业IT应用度和信息安全管理水平的不断提高&#xff0c;企业对于安全管理的配套设施如安全运营中心&#xf…

PMD 检查java代码:在条件语句中避免使用硬编码的字面量(AvoidLiteralsInIfCondition )

https://docs.pmd-code.org/pmd-doc-6.55.0/pmd_rules_java_errorprone.html#avoidliteralsinifcondition 在条件语句中&#xff0c;避免避免使用硬编码的字面量。可以将字面量声明为有描述意义的静态成员或者私有成员&#xff0c;提升可维护性。默认忽略"-1" 和&qu…

Spring IoC 的工作流程

概况 IOC 是什么 Bean 的声明方式 IOC 的工作流程 IOC 是什么 IOC 的全称是 Inversion Of Control, 也就是控制反转&#xff0c;它的核心思想是把对象的管理权限交给容器。 应用程序如果需要使用到某个对象实例&#xff0c;直接从 IOC 容器中去获取就行&#xff0c;这样设计的好…

CSP 202303-1 田地丈量

样例输入 4 10 10 0 0 5 5 5 -2 15 3 8 8 15 15 -2 10 3 15 样例输出 44 答题 首先写一个计算面积的函数&#xff0c;既然大小固定就省去了比较&#xff0c;然后是将在范围之外的矩阵给忽略掉&#xff0c;接下来将碰到的矩阵大小缩小为范围之内的&#xff0c;累加即可 #in…

剪辑App的MMKV应用优化实践

作者 | 我爱吃海米 导读 移动端开发中&#xff0c;IO密集问题在很多时候没有得到充足的重视和解决&#xff0c;贸然的把IO导致的卡顿放到异步线程&#xff0c;可能会导致真正的问题被掩盖&#xff0c;前人挖坑后人踩。其实首先要想的是&#xff0c;数据存储方式是否合理&#x…

阿里云服务器2核4G5M配置一年和五年价格明细表

阿里云2核4G服务器5M带宽可以选择轻量应用服务器或云服务器ECS&#xff0c;轻量2核4G4M带宽服务器297元一年&#xff0c;2核4G云服务器ECS可以选择计算型c7、c6或通用算力型u1实例等&#xff0c;买5年可以享受3折优惠&#xff0c;阿腾云分享阿里云服务器2核4G5M带宽五年费用表&…