我正在处理一个挑战,我正在尝试使用嵌套for循环来解决它。挑战要求在给定的整数数组nums
和整数k
中,确定数组中是否有两个不同的索引i
和j
,其中nums[i] = nums[j]
和i
和j
之间的绝对差小于或等于k
这是我的尝试:
def containsCloseNums(nums, k):
for i in nums:
for j in nums:
if (nums[i] == nums[j]) and abs(i-k) <= k:
return True
else:
return False
但这是我得到的错误:
Traceback (most recent call last):
main.py3 in the pre-written template, in getUserOutputs
userOutput = _rundyxlc(testInputs[i])
main.py3 in the pre-written template, in _rundyxlc
return containsCloseNums(*_fArgs_zeutcbsrcmec)
main.py3 in the pre-written template, in containsCloseNums
if (nums[i] == nums[j]) and abs(i-j) <= k:
IndexError: list index out of range
我看不出我超出索引的原因,因为我的增量没有超过列表的长度
我很感激所有的帮助,但由于这是一个挑战,我更愿意知道为什么我的逻辑不起作用,而不是仅仅给出一个答案
您应该将for循环更改为:
您正在生成元素,而不是索引。在
nums
中有一个元素大于nums
的长度,这就是抛出错误的原因在代码中
“i”是列表中的“nums”项
您应更改为:
那么“index_i”是项的索引,而value_i是列表“nums”中项的值
顺便说一下,我认为应该是:
For循环遍历列表中的值,而不是索引
你会看到:
有
enumerate
函数来获取索引。它为列表中的每个值形成(标记,值)元组:输出:
此外,您的解决方案具有O(n^2)复杂性,这对于您的任务来说并不完美。想一想,如果你可以使用集合、dicts,或者也许可以利用排序来整理你的列表
相关问题 更多 >
编程相关推荐