2011-06-05 86 views
0

我希望能夠判斷int []中的任何數字是否出現3次或更多次?我怎樣才能做到這一點?檢查int中的重複數字[] Java

將是真棒有方法

boolean hasTriples(int[] numbers) { 

//some code 

} 
+1

「會很棒的方法」 - 這將是一個「圖書館膨脹」,海事組織的令人震驚的情況。 – 2011-06-05 06:33:15

+0

大聲笑我同意,但我的意思是我希望答案的格式。 – 2011-06-05 06:38:43

回答

2

這是一種不使用任何額外的類(如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,因爲不能有任何三個副本。

希望這會有所幫助!

7

創建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)); 
4
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; 
    } 

這裏是發生了什麼事情:

  1. 你傳遞一個int在數組中。
  2. 您將數組值的映射設置爲值的計數。
  3. 你走陣列。對於陣列中的每個整數:

    a。您檢索該數組值的當前計數

    b。如果不存在值,則以值1開始

    c。如果給定值的地圖中確實存在值,請添加一個

    d。如果從地圖+ 1中檢索到的值超過了3的限制,那麼您已經證明陣列中有至少三次重複的值。

  4. 如果您將其設置爲循環結束而未返回true,則返回false,因爲沒有值會重複3次。

+0

這看起來正是我想要的,關於代碼如何工作的一點洞察力將會很棒,但它背後的想法很棒。 – 2011-06-05 06:19:42

+0

如何使用foreach循環代替? – Bohemian 2011-06-05 06:41:24

+0

@Seth - 簡單。這個解決方案和@ aioobe都構建了一個臨時的「映射」,用於計算輸入數組中每個整數發生的次數。 – 2011-06-05 06:43:01