找到第二个匹配项具有最小索引的第一个重复数字

use*_*144 0 python algorithm dictionary python-2.7 data-structures

这是关于codefights的问题:

给定一个仅包含1到a.length范围内的数字的数组a,找到第二个匹配项具有最小索引的第一个重复数字.换句话说,如果有多于1个重复的数字,则返回第二次出现的索引小于另一个出现的第二次出现的索引的数量.

我一直在努力弄清楚如何在python中完成这个.我不确定我是否在正确的道路上,如果我是,我似乎无法弄清楚如何从我的字典中找到特定值后访问我的索引字典.我想在我的d字典中获取大于1的所有值,然后从索引中获取这些值,然后索引中较小的值将是答案.

如果我完全错了,请告诉我.

def firstDuplicate(a):
    d = {}
    index = {}

    for i in a:
        if i in d:
            d[i] += 1
        else:
            d[i] = 1

    for i,e in enumerate(a):
        if e in d:
            index[e] = i
        else:
            index[e] = i

    for key,val in d.items():
        if val > 1:
Run Code Online (Sandbox Code Playgroud)

MBo*_*MBo 9

嗯......简单方法有什么问题?

def firstDuplicate(a):

   aset = set()
   for i in a:
       if i in aset:
           return i
       else:   
           aset.add(i)

print(firstDuplicate([7,4,5,6,4,6,3]))  
Run Code Online (Sandbox Code Playgroud)

字典版本:

adict = {}
for i in a:
   if i in adict:
       return i
   else:   
       adict[i] = 1   
Run Code Online (Sandbox Code Playgroud)