我希望能夠判斷int []中的任何數字是否出現3次或更多次?我怎樣才能做到這一點?檢查int中的重複數字[] Java
將是真棒有方法
boolean hasTriples(int[] numbers) {
//some code
}
我希望能夠判斷int []中的任何數字是否出現3次或更多次?我怎樣才能做到這一點?檢查int中的重複數字[] Java
將是真棒有方法
boolean hasTriples(int[] numbers) {
//some code
}
這是一種不使用任何額外的類(如Map類)的方法。它可能會更慢,但希望更容易理解。
public boolean hasTriples(int[] list) {
for (int i = 0; i < list.length; i++){
int duplicates = 0;
for (int j = i+1; j < list.length; j++){
if (list[i] == list[j]) {
duplicates++;
if (duplicates >= 3) return true;
}
}
}
return false;
}
這是什麼代碼在做什麼。 outer for循環遍歷列表以確保檢查每個值的重複值。內部循環遍歷列表的重新檢查,以檢查有多少重複值。如果找到三個或更多重複項,則該函數將返回true並且不處理列表的其餘部分。如果outer for循環沒有返回true,則返回false,因爲不能有任何三個副本。
希望這會有所幫助!
創建Map<Integer, Integer>
,讓整ň地圖的ň出現的次數。
循環遍歷數組來填充地圖,然後通過在地圖上的鑰匙環,以檢查哪些鍵映射到一個值> = 3
下面是一些代碼,讓你開始:
int[] arr = { 1, 3, 2, 3, 3, 4, 2, 2 };
Map<Integer, Integer> counts = new HashMap<Integer, Integer>();
// Count occurrencies
for (int i : arr) {
if (!counts.containsKey(i))
counts.put(i, 0);
counts.put(i, 1 + counts.get(i));
}
// Print how many times each number occurs in arr.
for (int i : counts.keySet())
System.out.printf("i: %d, count: %d%n", i, counts.get(i));
public boolean anyRepeatThreeTimes(int [] array) {
Map<Integer, Integer > map = new HashMap<Integer, Integer>();
for (int index = 0; index < array.length; index++) {
Integer total = map.get(array[ index ]);
int count;
if (total == null) {
count = 1;
}
else {
count = total + 1;
if (count >= 3) {
return true;
}
}
map.put(array[ index ], count);
}
return false;
}
這裏是發生了什麼事情:
你走陣列。對於陣列中的每個整數:
a。您檢索該數組值的當前計數
b。如果不存在值,則以值1開始
c。如果給定值的地圖中確實存在值,請添加一個
d。如果從地圖+ 1中檢索到的值超過了3的限制,那麼您已經證明陣列中有至少三次重複的值。
如果您將其設置爲循環結束而未返回true,則返回false,因爲沒有值會重複3次。
這看起來正是我想要的,關於代碼如何工作的一點洞察力將會很棒,但它背後的想法很棒。 – 2011-06-05 06:19:42
如何使用foreach循環代替? – Bohemian 2011-06-05 06:41:24
@Seth - 簡單。這個解決方案和@ aioobe都構建了一個臨時的「映射」,用於計算輸入數組中每個整數發生的次數。 – 2011-06-05 06:43:01
「會很棒的方法」 - 這將是一個「圖書館膨脹」,海事組織的令人震驚的情況。 – 2011-06-05 06:33:15
大聲笑我同意,但我的意思是我希望答案的格式。 – 2011-06-05 06:38:43