有多個相關問題,但我正在尋找特定於我的案例的解決方案。有一個(通常)14個整數的數組,每個範圍在1到34之間。如何快速判斷特定靜態列表中的每個int是否至少在該數組中出現過一次?如何快速判斷列表是否包含列表?
僅供參考,我目前使用此代碼,這是寫入儘可能地類似於規範,所以它肯定可以大大提高:
if (array.Count < 13) {
return;
}
var required = new int[] {
0*9 + 1,
0*9 + 9,
1*9 + 1,
1*9 + 9,
2*9 + 1,
2*9 + 9,
3*9 + 1,
3*9 + 2,
3*9 + 3,
3*9 + 4,
3*9 + 5,
3*9 + 6,
3*9 + 7,
};
IsThirteenOrphans = !required.Except (array).Any();
所需的列表不是動態的,即它在運行時總是一樣的。使用Linq是可選的,主要方面是性能。
編輯:
- 輸入陣列未被排序。
- 輸入值可能會出現多次。
- 輸入數組將包含至少14個項目,即比所需數組多1個。
- 只有1個需要的數組,它是靜態的。
- 所需的值是不同的。
- 您可能會認爲直方圖創建起來很便宜。
更新:我也對排序輸入數組的解決方案感興趣。
是14個整數不同? – CodesInChaos 2010-11-16 10:24:54
@Code不一定。 – mafu 2010-11-16 10:47:54
我認爲你的代碼也有bug。如果'required'包含一個重複的數組,但''數組'不適用於某個int,它將通過您的測試。 – CodesInChaos 2010-11-16 10:52:03