王老头

导航

顺丰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

 

posted on 2018-09-15 16:12  王老头  阅读(199)  评论(0)    收藏  举报