public static boolean hasTwoPair(int[] arrayOfInts){
}
如果该方法可以找到两对不同的匹配int
值,则该方法返回true。因此,如果数组是{2,2,4,7,7}
,它应该返回true,因为它有两个2和两个7。
它仅适用于不同的对值。如果它是{2,2,2,2,5}
,它将返回false,因为它们不是不同的对值。
编辑:这是我到目前为止对该方法的主体:
boolean pairFound = false;
int pairValue;
for(int s = 0; s < arrayOfInts.length - 1; s++){
pairValue = arrayOfInts[s];
for(int c = s + 1; c < arrayOfInts.length; c++){
if(pairValue == arrayOfInts[c])
pairFound = true;
}
}
return false; //placeholder
我不知道从哪里开始。
答案 0 :(得分:2)
此任务要求您构建计数列表:
Map<Integer,Integer>
),其中包含数组中每个数字的计数。true
;否则,请返回false
。第一个例子的计数如下:
V #
- -
2 - 2
4 - 1
7 - 2
您有两个项目(2和7),计数为2,因此请返回true
。
第二个例子的计数如下:
V #
- -
2 - 4
5 - 1
只有一个项目的计数大于2,因此请返回false
。
如果您使用HashMap
,此算法会在O(n)
中生成答案。
答案 1 :(得分:1)
由于您还没有尝试过任何代码,我将介绍如何解决此问题,但没有实际代码。
从boolean
开始,例如pairFound
已初始化为false
,并在找到第一个true
时更改为pair
。此外,您需要int
(pairValue
来跟踪找到的第一对的价值(如果找到的话)。
迭代,寻找一对。如果您找到一对,pairFound
为假,请将pairFound
设置为true
,并将pairValue
设置为您首次找到pair
的值。现在继续迭代。
如果您找到一对且pairFound
为true
且该对为!= pairValue
,则为return true;
。如果您遍历所有内容但尚未返回true
,那么您可以return false
。
根据您更新的问题,您非常接近。
boolean pairFound = false;
int pairValue = Integer.MIN_VALUE;
//or some value that arrayOfInts will never have based on context
for(int s = 0; s < arrayOfInts.length - 1; s++){
if(arrayOfInts[s] == pairValue) {
continue;
}
for(int c = s + 1; c < arrayOfInts.length; c++){
if(arrayOfInts[s] == arrayOfInts[c]) {
if(arrayOfInts[s] != pairValue) {
if(pairFound) {
return true;
}
pairValue = arrayOfInts[s];
pairFound = true;
break;
}
}
}
}
return false;
答案 2 :(得分:0)
对数组进行排序。然后查找匹配的前两个连续值。如果找到,请跳至与匹配对不同的第一个条目并重复。如果在第一次或第二次搜索成功之前到达数组的末尾,则返回false
。
答案 3 :(得分:0)
您不需要对数组进行排序,这会给O(n * log(n))带来复杂性。但是你现在的解决方案更糟糕,因为它产生了O(n ^ 2)的复杂性。但是你也不需要HashMap。 Set和一个整数就足够了:
null
对其进行初始化)
null
,请将其设置为元素值至于Set实现,我建议HashSet
但这里还有更多要说的。如果你像这样实现它,你不假设整数和可索引数组。您只需要一个可比元素列表。因此,您可以使您的方法的签名更通用:
public static boolean hasTwoPair(Iterable<E> iterable)
但由于数组不支持泛型和Iterable接口,因此该方法的每个客户端都必须使用asList()
方法将Array参数转换为Iterable。如果这太不方便你可以提供另一种方法:
public static <T> boolean hasTwoPair(T[] array)
一般来说,在设计API时使用最通用的类型是个好主意(另见“Effective Java,Second Edition”中的第40和52条)