數組共有101個值。此數組包含從1到100的數字,並且一個數字正在重複(兩次)。編寫僞代碼來查找重複編號。psuedo代碼找到重複的號碼?
回答
- 你可以散列值和檢測 衝突
- 你可以對數組進行排序,然後循環 它發現重複
- 你可以搜索陣列(長 慢!)
如果你想變得聰明,看看哈希。如果你想玩它簡單和安全,使用合併排序對列表進行排序,然後循環索引可能是最好的。
排序數組將是O(N log N),這就是如果你選擇一個體面的排序算法。具有「看到」標誌陣列的線性搜索會更快(O(N),操作不重要)。然而,最後一部分是關鍵 - 比較每個條目的確是「漫長而緩慢的」,所以除非有O(1)種方式回答「我之前看過這個數字嗎?」這個問題,否則不要這樣做。 。 – cHao 2010-08-05 10:33:52
雖然你看到「國旗」怎麼樣?那就是問題所在! – 2010-08-05 10:58:52
在提供集合或字典的語言中很容易。遍歷數組,如果它不在那裏,則向數組添加一個數字。如果是這樣,你有你的副本。 – 2010-08-05 13:00:46
我將所有的索引加起來[0] - > [100]找出1 + 2 + 3 ... + 100應該等於從結果中減去該值,並得到重複數。
所以你只需要一個簡單的
for
或while
循環經歷的每個索引,然後減去2,你有你的結果。
喜歡的東西...
q = 0;
p = 101 * 50;
for(i<=100; i <array.length; i++){
q += q + array[i]
}
repeating number = q-p;
試試這個(C#):
int[] array = ... ; // initialize appropriately
var hashSet = new HashSet<int>();
var indexOfDuplicate = -1;
for (var i = 0; i < array.Length; i++) {
if (hashSet.Contains(array[i])) {
indexOfDuplicate = i;
break;
}
hashSet.Add(array[i]);
}
var duplicateNumber = array[indexOfDuplicate];
有了這個解決方案,您將有重複的號碼(第2發生)和重複數的兩個指標。
Set set;
對於陣列中的每個p { set.add(p); }
print(set);
- 1. 電話代碼找到SIM卡號碼
- 2. 代碼重複
- 3. 代碼重複
- 4. 代碼重複
- 5. 重複代碼
- 6. 重複的代碼
- 7. 找到另一個號碼的號碼?
- 8. 如何通過代碼中找到的iPhone的型號代碼
- 9. 錯誤:代碼簽名失敗,退出代碼1.找不到重複的plists
- 10. 查找IMEI號的代碼
- 11. Dreamweaver - 重複代碼
- 12. 重複PHP代碼
- 13. 代碼重複(PHP)
- 14. 代碼重複 - swift3
- 15. 重構重複jQuery代碼
- 16. Rails,重複代碼重構
- 17. Scala重構重複代碼
- 18. 發現重複號碼
- 19. Android中的重複代碼
- 20. 與重複的代碼
- 21. 刪除重複的代碼
- 22. UITableView中的重複代碼
- 23. 重複WordPress的代碼
- 24. 回調重複的代碼
- 25. 如何避免在POJO類中找到重複的代碼塊?
- 26. 使用C代碼找到一個文件的inode號碼
- 27. 化身Kramdown代碼 - 號碼重
- 28. 代碼重構,爲了擺脫重複的代碼
- 29. 重構代碼刪除重複的代碼
- 30. 查找和複製代碼
這是什麼?家庭作業?挑戰?垃圾郵件? – 2010-08-05 10:09:10
同意,它幾乎看起來像一個剪切和粘貼的任務! – 2010-08-05 10:16:54