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)
请帮忙,因为我不知道这里出了什么问题。
发布于 2022-02-14 05:26:11
您的代码将根据键存储在字典中的顺序返回重复元素的索引。在收集了按数字键键的字典中的所有值之后,您的代码按如下方式迭代该字典:
for i in D:这个循环访问字典键(索引)的顺序取决于Python版本。见Are dictionaries ordered in Python 3.6+?。
在编写“Geeks for Geeks”时使用版本3.5.2,因此访问键的顺序是未定义的,这意味着有时您的函数将不会在他们的网站上返回预期的答案,而在您自己的环境中,它将始终是正确的(如果您有最新版本的话)。
更正
您可以更改您的代码,以便它不依赖于字典的顺序。相反,在插入期间,检查哪个是具有最小值的字典键。下面是您的代码更正了,只是考虑到了这些更改:
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这就行了。
发布于 2022-02-14 06:16:44
https://stackoverflow.com/questions/71107361
复制相似问题