给定正整数列表,找到列表中不存在的最小整数。
例如: list = [7,4,9,1],答案是2。
什么应该是最快的算法(没有排序)来计算不在列表中的最小整数?
注意整数列表非常大,所以无法进行散列?
答案 0 :(得分:0)
<强>为O(n *的log(n))强>
在O(n * log(n))中运行的最简单的算法是:
O(n)和O(1)额外空间
存在以O(n)运行的算法。 它的工作原理如下:
答案 1 :(得分:0)
在一般情况下,我会
答案 2 :(得分:0)
如果数字唯一,您可以在O(nlogn)中使用二进制搜索。缺失值最多为n。
答案 3 :(得分:0)
// Mark arr[i] as visited by making arr[arr[i] - 1] negative. Note that
// 1 is subtracted because index start from 0 and positive numbers start from 1
for(i = 0; i < size; i++)
{
if(abs(arr[i]) - 1 < size && arr[abs(arr[i]) - 1] > 0)
arr[abs(arr[i]) - 1] = -arr[abs(arr[i]) - 1];
}
// Return the first index value at which is positive
for(i = 0; i < size; i++)
if (arr[i] > 0)
return i+1; // 1 is added becuase indexes start from 0
}
2步算法从数组中找到最小的正缺失元素
Time: O(n)
Space: O(1)