顺丰2018人工智能在线笔试题
题目描述:
首先输入一个数字,表示接下来要输入多少个数字。接下来对这些输入的数字找出频率出现最高的两个数并求和。(频率相同按先后顺序)
输入样例:
6
1
1
2
2
3
3
输出结果:
3
这里一开始存到dict中,结果字典中存储是无序的,搞了半天还是没出来,只AC了50%,现在总结下:
思路大概:存到dict中,另外建一个list保存一开始存入数字的顺序,后面按这个顺序来读取dict的key和value,并且保证key不要重复。
while True: try: num = int(raw_input()) sstr = [raw_input() for _ in range(num)] sinstr = [] for i in range(len(sstr)): if(sstr[i] not in sinstr): sinstr.append(sstr[i]) vstr = [1 for _ in range(num)] maxout = [] if(len(list(set(sstr)))==1): maxout.append(sstr[0:2]) else: max1 = 0 max2 = 0 dict_my = {} vlist = [] for key,value in zip(sstr,vstr): if(key not in dict_my.keys()): dict_my.update({key:value}) else: dict_my[key] = dict_my[key] + 1 # print(dict_my) for i in range(len(sinstr)): key = sinstr[i] vlist.append(dict_my[key]) # print(vlist) svlist = sorted(vlist,reverse=True) sumv = 0 usedlist = [] for i in range(len(sinstr)): key = sinstr[i] if(dict_my[key]==svlist[0]): usedlist.append(key) #保存已经使用过的key,下一个数不能再使用 sumv += int(key) break for i in range(len(sinstr)): key = sinstr[i] if(dict_my[key]==svlist[1] and key not in usedlist): sumv += int(key) break print(sumv) except: break
浙公网安备 33010602011771号