首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我不明白为什么这个代码是错误的。

我不明白为什么这个代码是错误的。
EN

Stack Overflow用户
提问于 2022-02-14 05:04:26
回答 2查看 62关注 0票数 -1
代码语言:javascript
复制
class Solution:
    
    def firstRepeated(self,A, n):
        
        #arr : given array
        #n : size of the array
        
        D={}
        for i in range(n):
            if A[i] not in D:
                D[A[i]]=[i]
            else: 
                D[A[i]].append(i)
        c=0
        for i in D:
            if(len(D[i])>1):
                c+=1
                return (D[i][0]+1)
            
        if(c==0): return -1
       
A=[1 ,5 ,3, 4, 3, 5, 6]

n=len(A)

M=Solution()

print(M.firstRepeated(A,n))

这是极客给极客带来的问题。给定大小为n的数组arr[],查找第一个重复元素。该元素应该发生多次,其第一次出现的索引应该是最小的

假设索引位置(返回)从1开始。如果没有频率大于1的此类元素,则必须返回-1。

这段代码在VS代码中实际上工作正常,但是每当我在GFG中使用它时,它都会失败(显示3作为输出而不是2)

请帮忙,因为我不知道这里出了什么问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-14 05:26:11

您的代码将根据键存储在字典中的顺序返回重复元素的索引。在收集了按数字键键的字典中的所有值之后,您的代码按如下方式迭代该字典:

代码语言:javascript
复制
    for i in D:

这个循环访问字典键(索引)的顺序取决于Python版本。见Are dictionaries ordered in Python 3.6+?

在编写“Geeks for Geeks”时使用版本3.5.2,因此访问键的顺序是未定义的,这意味着有时您的函数将不会在他们的网站上返回预期的答案,而在您自己的环境中,它将始终是正确的(如果您有最新版本的话)。

更正

您可以更改您的代码,以便它不依赖于字典的顺序。相反,在插入期间,检查哪个是具有最小值的字典键。下面是您的代码更正了,只是考虑到了这些更改:

代码语言:javascript
复制
class Solution:
    def firstRepeated(self,A, n):
        D = {}
        c = len(A)
        for i in range(n):
            if A[i] not in D:
                D[A[i]] = i  # No need to maintain a list
            elif D[A[i]] < c: # When the dupe's first index is earlier...
                c = D[A[i]]

        if c == len(A):
            return -1
        return c + 1

这就行了。

票数 1
EN

Stack Overflow用户

发布于 2022-02-14 06:16:44

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71107361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档