給定正整數列表,找到不在列表中的最小整數。數組中缺少整數
例如:列表= [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