2011-06-05 89 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