擅长:python、mysql、java
<p>问题是,函数<em>总是</em>在<code>for</code>的第一个循环中存在:对于数组<code>[0, 1, 2, 4, 5]</code>的第一次迭代,差异是<code>-1</code>;并且<code>else</code>分支运行;这会立即返回最大的id+1。你知道吗</p>
<p>因此,此代码只能在</em>循环完成后执行:</p>
<pre><code>def next_id(arr):
if not arr:
return 0
arr.sort()
if arr[0] != 0:
return 0
for i in range(len(arr) - 1):
if arr[i] - arr[i + 1] < -1:
return arr[i] + 1
return arr[-1] + 1
</code></pre>
<p>请注意,也需要调整结束索引—而不是迭代到<code>len(arr)</code>,我们只能迭代到<code>len(arr) - 1</code>,否则<code>arr[i + 1]</code>将超出界限。你知道吗</p>
<hr/>
<p>如果你想写得更简洁,同样的算法也可以写成</p>
<pre><code>def next_id(arr):
return next(i for i, j in enumerate(sorted(arr) + [None]) if i != j)
</code></pre>