【面试总结-编程】多行两列数据,实现同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)

 凉凉

目录
相关文章
|
1月前
|
Java 开发者
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
26 0
|
1月前
|
存储 缓存 监控
Java面试题:在Java中,对象何时可以被垃圾回收?编程中,如何更好地做好垃圾回收处理?
Java面试题:在Java中,对象何时可以被垃圾回收?编程中,如何更好地做好垃圾回收处理?
34 0
|
2月前
|
算法 Java 调度
《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)
《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)
43 0
|
12天前
|
存储 负载均衡 算法
[go 面试] 一致性哈希:数据分片与负载均衡的黄金法则
[go 面试] 一致性哈希:数据分片与负载均衡的黄金法则
|
1月前
|
canal 缓存 NoSQL
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;先删除缓存还是先修改数据库,双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
|
17天前
|
人工智能 大数据 云计算
开启第二增长曲线!副业必备6000+课程、免费算力、编程实践助你飞速成长!
阿里云为高校学生提供全方位学习计划,含6000+免费精品课程与自测题,及免费在线编程练习。学生可免费获2.68亿小时算力,包括云服务器ECS、对象存储OSS等资源。同时,参与阿里云天池竞赛赢取高额奖金,并通过训练营获得实践经验和证书。借助这些资源,学生能紧跟信息化与AI潮流,为职业发展奠定坚实基础。
61 2
|
1月前
|
设计模式 安全 Java
Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
55 0
|
1月前
|
存储 并行计算 安全
Java面试题:请解释Java并发工具包中的主要组件及其应用场景,请描述一个使用Java并发框架(如Fork/Join框架)解决实际问题的编程实操问题
Java面试题:请解释Java并发工具包中的主要组件及其应用场景,请描述一个使用Java并发框架(如Fork/Join框架)解决实际问题的编程实操问题
17 0
|
1月前
|
存储 安全 Java
Java面试题:如何在Java应用中实现有效的内存优化?在多线程环境下,如何确保数据的线程安全?如何设计并实现一个基于ExecutorService的任务处理流程?
Java面试题:如何在Java应用中实现有效的内存优化?在多线程环境下,如何确保数据的线程安全?如何设计并实现一个基于ExecutorService的任务处理流程?
32 0
|
1月前
|
安全 Java 调度
Java面试题:Java内存优化、多线程安全与并发框架实战,如何在Java应用中实现内存优化?在多线程环境下,如何保证数据的线程安全?使用Java并发工具包中的哪些工具可以帮助解决并发问题?
Java面试题:Java内存优化、多线程安全与并发框架实战,如何在Java应用中实现内存优化?在多线程环境下,如何保证数据的线程安全?使用Java并发工具包中的哪些工具可以帮助解决并发问题?
37 0