我希望能够判断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