是否有任何算法從給定配對數字列表中找到不成對數字。例如,在{(1,2),(2,3),(3,4)}對中(1,3)和(2,4)從未配對過。從給定數字對發現不成對數字
0
A
回答
4
你能做到這一點,如下所示:
- 遍歷所有對,並建立了一套都出現在一組的數字。
- 構建所有可能的數字對,將結果存儲在不同的集合中。
- 迭代原始列表中的所有對,並從所有對的集合中刪除找到的每個對。
- 您現在剩下所有未出現在原始集合中的對。
當然,這假定你只關心原始集合中的值對。例如,對(1,5)也不在你的例子中。 (貓,狗)都不是。
這運行在時間O(n ),其中n是在原始組對中表示的數字的數量。
希望這會有所幫助!
0
使用LINQ和如下事實的對稱性特技拍攝優點,即(1,3)和(3,1)是相同的,所以忽略的情況下所述第二數量大於所述第一更大:
public static IEnumerable<Tuple<int, int>> GetUnpairedNumbers(IEnumerable<Tuple<int, int>> existingPairs) {
var uniqueNumbers = existingPairs.SelectMany(p => new[] {p.Item1, p.Item2}).Distinct().ToList();
var isUsed = uniqueNumbers.ToDictionary(n => n, n => uniqueNumbers.Where(inner => n < inner).ToDictionary(inner => inner, inner => false));
foreach(var currentPair in existingPairs) {
isUsed[currentPair.Item1][currentPair.Item2] = true;
}
return isUsed.Keys.SelectMany(n => isUsed[n].Where(kvp => !kvp.Value).Select(kvp => Tuple.Create(n, kvp.Key)));
}
public static void Main(string[] args) {
var unpairedNumbers = GetUnpairedNumbers(new[] { P(1, 2), P(2, 3), P(3, 4) });
}
private static Tuple<int, int> P(int a, int b) {
return Tuple.Create(a, b);
}
相關問題
- 1. 從給定數字生成隨機數
- 2. 從限制類對象實例的數量給定的數字
- 3. 對於大於給定數字的數字的grep行
- 4. 爲給定數字生成金字塔?
- 5. 需要在給定範圍內生成一對數字C#
- 6. 不是給定數字的數字
- 7. 字母數字串從對象數組
- 8. 發現的給定的「x」的數字可能數(C++)
- 9. 成對的數字或指數
- 10. 從括號的數字對
- 11. 發現字符串中給定子字符串的出現次數
- 12. 發送數據包給客戶端給定的remote_endpoint對象和套接字?
- 13. 生成給定GCD的數字列表
- 14. 將數字分隔成給定的一組數字
- 15. 生成給定數字的數字的所有排列?
- 16. 如何檢查數字是否由給定數字生成
- 17. 從c中給出數字生成隨機數字#
- 18. 絕對不同的數字
- 19. 將數字元素傳遞給對象
- 20. 對數字
- 21. 對數字
- 22. 找到由給定數字的數字組成的最大可能數字
- 23. 邏輯形式獲得最低UPPERBOUND對於給定數目從一組數字
- 24. 如何在給定數字中對每個數字進行排序?
- 25. 最常出現的數字的數量......找出給定數字中出現次數最多的數字
- 26. 獲取從給定的字集字校對
- 27. 將給定數字中所有數字的總和加到給定數字上?
- 28. 生成連續數字對 - 序言
- 29. jQuery的轉換對象值成數字
- 30. 按順序生成一對數字