def next_id(arr):
if arr:
arr.sort()
if arr[0] != 0:
return 0
for i in range(len(arr)):
if (arr[i]-arr[i+1])<-1:
return arr[i]+1
else:
return arr[len(arr)-1]+1
else:
return 0
我正在尝试查找最小的未使用ID,由于某些原因,它没有进入此if条件:
if (arr[i]-arr[i+1])<-1:
当我尝试这个的时候
next_id([0,1,2,3,5]
对于test,它返回6而不是4。你知道吗
这个怎么样?你知道吗
它只是遍历每个位置,如果不匹配则返回索引。我添加了set(),以防重复。你知道吗
所以:
问题是,函数总是在
for
的第一个循环中存在:对于数组[0, 1, 2, 4, 5]
的第一次迭代,差异是-1
;并且else
分支运行;这会立即返回最大的id+1。你知道吗因此,此代码只能在循环完成后执行:
请注意,也需要调整结束索引—而不是迭代到
len(arr)
,我们只能迭代到len(arr) - 1
,否则arr[i + 1]
将超出界限。你知道吗如果你想写得更简洁,同样的算法也可以写成
在
for
循环中,您有以下结构:这意味着
for
循环保证在第一次迭代时返回。请尝试这样的结构:如果
if
曾经满足,则此结构将获得第一个返回;如果if
从未满足,则此结构将获得第二个返回。你知道吗相关问题 更多 >
编程相关推荐