猿问

我想找出重复元素数组中元素的索引

a=[2, 1, 3, 5, 3, 2]


def firstDuplicate(a):

    for i in range(0,len(a)):

        for j in range(i+1,len(a)):                

            while a[i]==a[j]:

                num=[j]

                break

    print(num)


print(firstDuplicate(a))

输出应该是4和5,但是只有4


潇潇雨雨
浏览 245回答 2
2回答

蝴蝶不菲

您可以在O(n)时间和O(1)多余空间中找到数组中所有重复项的索引,如下所示:def get_duplicate_indices(arr):    inds = []    for i, val in enumerate(arr):        val = abs(val)        if arr[val] >= 0:            arr[val] = -arr[val]        else:            inds.append(i)    return indsget_duplicate_indices(a)[4, 5]注意,这将修改数组!如果要保持输入数组不变,则将上面的前几行替换为:def get_duplicate_indices(a):    arr = a.copy()  # so we don't modify in place. Drawback is it's not O(n) extra space    inds = []    for i, val in enumerate(a):        # ...从本质上讲,这使用数组中每个元素的符号作为以前是否看到过数字的指示器。如果我们遇到一个负值,则意味着我们已经看过达到的数字,因此我们将数字的索引附加到我们已经看到的索引列表中。请注意,如果数组中的值大于数组的长度,则可能会遇到麻烦,但是在这种情况下,我们只是将工作数组扩展为与输入中的最大值相同的长度。十分简单。

GCT1015

您的代码有些错误。以下将收集每个第一个重复项的索引:def firstDuplicate(a):    num = []  # list to collect indexes of first dupes    for i in range(len(a)-1):  # second to last is enough here        for j in range(i+1, len(a)):                            if a[i]==a[j]:  # while-loop made little sense                num.append(j)  # grow list and do not override it                break  # stop inner loop after first duplicate    print(num)当然,还有更多性能算法可以实现这一点,而不是二次方的。
随时随地看视频慕课网APP

相关分类

Python
我要回答