下面的代码打印出在 A
中重复的数字。
根据我的理解,for 循环遍历列表中的每个元素并将其变成一个负数,但我不明白为什么它不将它打印的数字(位于位置 0、4、5)变成负数.
A = [1,2,3,1,3,6,6]
def printRepeating(arr, size):
print("The repeating elements are: ")
for i,x in enumerate(arr):
if arr[abs(arr[i])] >= 0:
arr[abs(arr[i])] = -arr[abs(arr[i])]
print(arr)
else:
print (abs(arr[i]), end = " ")
printRepeating(A,len(A))
最佳答案
算法假定:
- 数组的所有元素都以正数开头,并且
- 数组的所有元素都小于数组的长度。
在您的示例中,由于数组的长度为 7,因此数组中的所有元素都必须介于 1 和 6 之间。
算法所做的是将 array[k]
更改为负值,以指示已看到 k
。例如,由于 1 是第一个看到的数字,array[1]
被更改为负数。下一次看到 1 时,array[1]
已经是负数,所以 1 一定是重复的。
关于python-3.x - 计算列表中重复项的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58440914/