给定正整数列表,找到不在列表中的最小整数。数组中缺少整数
例如:列表= [7,4,9,1],答案将是2.
应该是什么最快的算法(无排序)在列表中未计算的最小整数?
注意整数非常大的列表,所以哈希不可能?
给定正整数列表,找到不在列表中的最小整数。数组中缺少整数
例如:列表= [7,4,9,1],答案将是2.
应该是什么最快的算法(无排序)在列表中未计算的最小整数?
注意整数非常大的列表,所以哈希不可能?
如果数字是唯一您可以在O(nlogn)中使用二进制搜索。缺失值最多为n。
不应该为这个方法排序数组吗? –
如果您每次循环遍历整个阵列,则不适用。这就是为什么它是O(nlogn)而不是O(logn) – Ishtar
为什么这比仅仅排序和迭代更好?对于O(n)中的算法,请参阅我的回答 –
// 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)
除此之外,如果你有很严重的性能要求,排序之后迭代泡沫应该足够快。请注意,性能比较可能取决于典型的数组大小和整数值。 –
为什么不排序?你可以排序。数组是只读的吗? –
@dystroy或者如果你在采访中...... – Dukeling