利用unordered_map维护关联数据
2024-09-06 18:58:19
在leetcode上刷339题Evaluate Division(https://leetcode.com/problems/evaluate-division/#/description)时在脑中过了一遍想法,大概是生成26棵树,每棵树又有26个子节点,子节点下方对应其父节点与祖父节点相除的结果.
使用树结构进行存储、再通过问题给出的字母利用DFS进行搜索。
觉得实现起来比较费键盘就没有继续写下去,跑到discuss区看大神的写法。
在ycf303(以下简称y神)的答案中第一次接触到unordered_map这一结构。
unordered_map是C++11特性,利用hash表实现,查找效率极高。
y神代码如下:
1 class Solution {
2 public:
3 vector<double> calcEquation(vector<pair<string, string>> equations,
4 vector<double>& values, vector<pair<string, string>> query)
5 {
6 unordered_map<string,unordered_map<string, double>> m;
7 vector<double> res;
8 for (int i = 0; i < values.size(); ++i)
9 {
10 m[equations[i].first].insert(make_pair(equations[i].second,values[i]));
11 if(values[i]!=0)
12 m[equations[i].second].insert(make_pair(equations[i].first,1/values[i]));
13 }
14
15 for (auto i : query)
16 {
17 unordered_set<string> s;
18 double tmp = check(i.first,i.second,m,s);
19 if(tmp) res.push_back(tmp);
20 else res.push_back(-1);
21 }
22 return res;
23 }
24
25 double check(string up, string down,
26 unordered_map<string,unordered_map<string, double>> &m,
27 unordered_set<string> &s)
28 {
29 if(m[up].find(down) != m[up].end()) return m[up][down];
30 for (auto i : m[up])
31 {
32 if(s.find(i.first) == s.end())
33 {
34 s.insert(i.first);
35 double tmp = check(i.first,down,m,s);
36 if(tmp) return i.second*tmp;
37 }
38 }
39 return 0;
40 }
41 };
花了一个多小时对unordered_map进行研究和总结,发现相较于我利用树对题中数据进行存储的方式,unordered_map更加快捷,而且只有实际存在的数据才会进行插入,不用造成不必要的内存开销,是我这种内存强迫症患者的福音。
至于时间复杂度方面,unordered_map查找的时间复杂度O(1)和我的森林相同,但写起来要快捷的多,以后再遇到此类问题需要打表存储,都会尽量使用unordered_map。
最新文章
- KMP专题
- oracle10g冷备份和恢复过程记录
- 剑指Offer面试题:18.二叉树的镜像
- ASP.NET 开发必备知识点(2):那些年追过的ASP.NET权限管理
- sql 去重
- Linux中oracle安装时候报ora-00119解决办法
- 数据库的group by 分组
- Hiver 操作 MySQL 导致锁表
- sql 查看语句的性能
- 大数据学习记录之ssh绵密登录
- 斗牛app上架应用宝、牛牛手机游戏推广、百人牛牛app应用开发、棋牌游戏上传、手游APP优化
- 中国(北方)大学生程序设计训练赛(第一周) (D E)
- SSH反向连接及Autossh
- 【细小碎的oi小知识点总结贴】不定时更新(显然也没人看qwq)
- PAT Basic 1001
- JQ 关于each() 箭头函数报错的问题
- 使用Dotfuscator混淆你的.net程序
- SAP RFC函数
- JavaScript--事件入门(24)
- SCTF2018-Event easiest web - phpmyadmin
热门文章
- Linux下向windows传输文件【sz 文件】没有弹框提示下载到什么位置
- LOTO虚拟示波器软件功能演示之——FIR数字滤波
- Go语言核心36讲(Go语言进阶技术十四)--学习笔记
- jmeter 数据库压力测试之MySql
- 01 | let 和 const语法 | es6
- #web开发# 知道cookie hostonly属性的请举手。
- PTA 7-3 畅通工程之最低成本建设问题 (30分)
- ofd文件电子签章实现方法
- 分布式条件下Integer大小比值的问题
- [atAGC014E]Blue and Red Tree