【面试总结-编程】多行两列数据,实现同key的value求和并输出

简介: 一个文件,两列,多行。第一列是字母,第二列是数字,同列数据之间通过空格分割。统计首列字母相同的第二列之和。样例输入:A 5B 6OO 7A 6A 2OO 2输出:A:13B:6OO:9面试官要求30分钟内实现,python,C++实现。

 

一个文件,两列,多行。

第一列是字母,第二列是数字,同列数据之间通过空格分割。

统计首列字母相同的第二列之和。

样例输入:

A 5

B 6

OO 7

A 6

A 2

OO 2

输出:

A:13

B:6

OO:9

面试官要求30分钟内实现,python,C++实现。

夸下5分钟写完一种语言海口的我花了18分钟睡觉……(晕)

然后开始整理思路,一开始写了很久vector+查找算法的(因为考虑map插入会导致覆盖),写了半天发现……太复杂了,而且查找算法确实应用的不熟练。后来转变一下思路map可以取出原来的值再加进去。。我去

捡起来半生不熟的map用法。。

思路就是:整个数据看作key-value结构,map的特性就是如果找一个不存在的,会自动插入并赋值默认值。value求和只需要找出对应key的map元素,取出当前的value(如果没有,int之类的默认是0),和新value相加后再塞回去。python直接利用字典这个结构即可。

 

 1 #include<map>
 2 #include<string>
 3 #include<iostream>
 4 #include<fstream>
 5 #include<sstream>
 6 
 7 using namespace std;
 8 
 9 typedef double datatype;
10 
11 template<typename T>
12 void Stringtoother(string str, T &result)//编写的模板函数供之后重用,实现字符串到任意类型(如果可以)的转换
13 {
14     istringstream is(str);
15     is >> result;
16 }
17 
18 int main(int argc, char** argv) {
19     map<string, datatype> mp;//声明最终存储的map
20 
21     ifstream in("D:\\test.txt");//测试样例,完全符合要求的情况下测试正常(未考虑文件出错的情况)
22 
23     //ifstream in(argv[1]);//实际的路径,可以通过cmd读取
24 
25     if (in.fail())
26     {
27         cout << "文件打开失败!" << endl;
28         system("pause");
29         return -1;
30     }
31 
32     string s;//文件读取每一行存储到的字符串
33     mp.clear();
34     while (getline(in, s))
35     {
36         int tag = s.find(" ");
37         string temp1, temp2;
38         temp1 = s.substr(0, tag - 1);
39         temp2 = s.substr(tag + 1, s.size());
40 
41         int value = 0;
42         Stringtoother(temp2, value);
43         mp[temp1] += value;//键值先读取原来的,然后再相加后覆盖
44 
45     }
46 
47     map<string, datatype>::iterator it;//最终结果输出
48     for (it = mp.begin(); it != mp.end(); it++) {
49         cout << it->first << ":" << it->second << endl;
50     }
51 
52     system("pause");
53     return 0;
54 }

python实现

 1 def readFile(path):
 2     dict_data={}
 3     with open(path,'r') as df:
 4         for kv in [d.strip().split(' ') for d in df]:
 5             temp=dict_data.get(kv[0],0)
 6             dict_data[kv[0]]=float(kv[1])+temp
 7     return dict_data;
 8 
 9 test_data={}
10 test_data=readFile("D:\\test.txt")
11 print(test_data)

 凉凉

目录
相关文章
|
6月前
|
Java 开发者
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
65 0
|
7天前
|
NoSQL 关系型数据库 MySQL
招行面试:高并发写,为什么不推荐关系数据?
资深架构师尼恩针对高并发场景下为何不推荐使用关系数据库进行数据写入进行了深入剖析。文章详细解释了关系数据库(如MySQL)在高并发写入时的性能瓶颈,包括存储机制和事务特性带来的开销,并对比了NoSQL数据库的优势。通过具体案例和理论分析,尼恩为读者提供了系统化的解答,帮助面试者更好地应对类似问题,提升技术实力。此外,尼恩还分享了多个高并发系统的解决方案及优化技巧,助力开发者在面试中脱颖而出。 文章链接:[原文链接](https://mp.weixin.qq.com/s/PKsa-7eZqXDg3tpgJKCAAw) 更多技术资料和面试宝典可关注【技术自由圈】获取。
|
16天前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
2月前
|
存储 NoSQL 算法
面试官:Redis 大 key 多 key,你要怎么拆分?
本文介绍了在Redis中处理大key和多key的几种策略,包括将大value拆分成多个key-value对、对包含大量元素的数据结构进行分桶处理、通过Hash结构减少key数量,以及如何合理拆分大Bitmap或布隆过滤器以提高效率和减少内存占用。这些方法有助于优化Redis性能,特别是在数据量庞大的场景下。
面试官:Redis 大 key 多 key,你要怎么拆分?
|
3月前
|
存储 缓存 关系型数据库
滴滴面试:单表可以存200亿数据吗?单表真的只能存2000W,为什么?
40岁老架构师尼恩在其读者交流群中分享了一系列关于InnoDB B+树索引的面试题及解答。这些问题包括B+树的高度、存储容量、千万级大表的优化、单表数据量限制等。尼恩详细解释了InnoDB的存储结构、B+树的磁盘文件格式、索引数据结构、磁盘I/O次数和耗时,以及Buffer Pool缓存机制对性能的影响。他还提供了实际操作步骤,帮助读者通过元数据找到B+树的高度。尼恩强调,通过系统化的学习和准备,可以大幅提升面试表现,实现“offer直提”。相关资料和PDF可在其公众号【技术自由圈】获取。
|
6月前
|
存储 缓存 监控
Java面试题:在Java中,对象何时可以被垃圾回收?编程中,如何更好地做好垃圾回收处理?
Java面试题:在Java中,对象何时可以被垃圾回收?编程中,如何更好地做好垃圾回收处理?
85 0
|
3月前
|
监控 Java easyexcel
面试官:POI大量数据读取内存溢出?如何解决?
【10月更文挑战第14天】 在处理大量数据时,使用Apache POI库读取Excel文件可能会导致内存溢出的问题。这是因为POI在读取Excel文件时,会将整个文档加载到内存中,如果文件过大,就会消耗大量内存。以下是一些解决这一问题的策略:
430 1
|
3月前
|
NoSQL Redis
redis 的 key 过期策略是怎么实现的(经典面试题)超级通俗易懂的解释!
本文解释了Redis实现key过期策略的方式,包括定期删除和惰性删除两种机制,并提到了Redis的内存淘汰策略作为补充,以确保过期的key能够被及时删除。
68 1
|
3月前
|
存储 关系型数据库 MySQL
面试官:MySQL一次到底插入多少条数据合适啊?
本文探讨了数据库插入操作的基础知识、批量插入的优势与挑战,以及如何确定合适的插入数据量。通过面试对话的形式,详细解析了单条插入与批量插入的区别,磁盘I/O、内存使用、事务大小和锁策略等关键因素。最后,结合MyBatis框架,提供了实际应用中的批量插入策略和优化建议。希望读者不仅能掌握技术细节,还能理解背后的原理,从而更好地优化数据库性能。
|
5月前
|
消息中间件 算法 Java
面试官:Kafka中的key有什么用?
面试官:Kafka中的key有什么用?
200 3
面试官:Kafka中的key有什么用?