京东数据分析笔试题
1、第一题——姓名排序
ZHANG SAN LI SI WANG WU WANG LIU WANG QI ZHANG WU LI WU给出n行姓名,然后根据姓出现次数进行排序,当姓出现次数一样大多的时候,根据输入的熟悉排序。
3 WANG WU 4 WANG LIU 5 WANG QI 1 ZHANG SAN 2 LI SI 6 ZHANG WU 7 LI WU结果如上,第一列为我自己加的输入顺序。
最后考试结束的时候解决了最后的问题,不知道能不能ac。然后就是非常暴力的解法。。也不知道对不对,麻烦大神给看看可行不可行。
count = 0 ans = {} while(1): # 读取每一行 line = input() if line != "": count += 1 if line.split()[0] not in ans.keys(): ans[line.split()[0]] = [1,[line.split()[1],count]] else: ans[line.split()[0]][0] += 1 ans[line.split()[0]].append([line.split()[1],count]) # 先用字典统计姓出现的次数,并存储下来对应的名字和输入顺序。{姓:[次数,[名1,次序],[名2,次序]...]} else: break firstcount = [] # 第一次遍历字典,获取姓名出现的次数,并进行排序和取唯一值处理 for key,value in ans.items(): if value[0] not in firstcount: firstcount.append(value[0]) firstcount = sorted(firstcount,reverse=True) index = [] # 第二次遍历字典,将对应出现次数的姓根据出现次数的递减的情况添加到待输出的列表 tempList [[姓1,[名1,次序]],[姓1,[名2,次序]]...] # 此时的tempList中均为出现情况如下 # 1、只有一个姓——按照出现顺序输出。此时是在出现次数递减的情况下, # 2、多个姓。 # for i in firstcount: tempList = [] for key,values in ans.items(): if values[0] == i: for value in values[1:]: tempList.append([key,value]) for value in tempList: index.append(value[1][1]) # 获取输入的次序,对次序进行排序。升序 index = sorted(index) for i in index: for value in tempList: if i == value[1][1]: print(' '.join([value[0],value[1][0]])) # 遍历待输出列表,因为次序的唯一性,可以完全输出。
最后几分钟没提交上,麻烦各位大神帮忙看看。以及,为什么我都还没怎么看到用python写的 人捏。。。
2、第二题,最佳输入次数。
时间来不及了,大概的思路就是,当前是小写的情况,一个小写字符后三个如果都是大写,则必须切换大小写键,然后这一段大写的按键次数是 k - 2次;然后就没有然后了。。c++大神们的看不懂啊。。