这是来自代码争斗。该方法有效,但对于大输入显然需要太长时间。有人可以解释这个解决方案的低效率吗?
问题: 给定一个整数数组,编写一个函数来确定数组是否包含任何重复项。如果任何元素在数组中出现至少两次,则您的函数应该返回true,如果每个元素都是不同的,它应该返回false。
实施例
对于a = [1,2,3,1],输出应为 containsDuplicates(a)= true。
给定数组中有两个1。
解决方案:
static boolean containsDuplicates(int[] a) {
boolean elementRepeat = false;
for (int loop1 = 0; loop1 < a.length; loop1++){
for (int loop2 = 0; loop2 < a.length; loop2++){
if (a[loop1] == a[loop2] && loop1!=loop2){
elementRepeat = true;
return elementRepeat;
}
}
}
return elementRepeat;
}
答案 0 :(得分:2)
执行此操作的一种方法是将数组存储在Set
中,然后比较数组和集合的长度。方法如下:
static boolean containsDuplicates(int[] array) {
HashSet<Integer> integers = new HashSet<>();
Arrays.stream(array).forEach(integers::add);
array.length == integers.size();
}
答案 1 :(得分:0)
我认为@Henry有一个非常好的消化。
这是一个例子:
import java.util.HashSet;
import java.util.Set;
public class Test4 {
public static void main(String[] args) {
Integer[] arrayInt = {1, 2, 3, 1};
Set<Integer> integers = new HashSet<Integer>();
boolean hasDuplicates = false;
for (Integer integerNumber : arrayInt) {
if (!integers.add(integerNumber)) {
hasDuplicates = true;
break;
}
}
System.out.println("Contains duplicates? " + hasDuplicates);
}
}
它会打印出来:
包含重复项?真