擅长:python、mysql、java
<p>@Chris关于排序<code>arr</code>的评论首先会起作用,但在平均时间复杂度方面不必要地花费<em>O(n logn)</em></p>
<p>如果先将给定数组转换为一个集合,然后在<code>while</code>循环中加倍<code>num</code>,直到在集合中不再找到<code>num</code>,则问题可以在线性时间复杂度<em>O(n)</em>中解决:</p>
<pre><code>def doubnum(arr, num):
pool = set(arr)
while num in pool:
num *= 2
return num
</code></pre>
<p>因此(注意<code>8</code>前面的<code>2</code>和<code>4</code>):</p>
<pre><code>doubnum([8, 1, 2, 4, 11, 12], 2)
</code></pre>
<p>将正确返回:<code>16</code></p>