我试图找出包含N个整数的给定数组A是否具有"主元素"。此数组的主元素是一个在数组中出现超过n / 2次的元素。
例如:
A={5,1,3,5,5}
有一个主元素(在本例中为5)。A={5,1,2,3,3}
没有主元素。以下是我的代码。
我想知道解决此问题的最有效算法是什么?
如果数组有主元素,则算法需要返回true
,如果没有主元素,则返回false
。
boolean masterElement(int[] a) {
int count = 0;
boolean check = false;
for (int i = 0; i < a.length/2; i++) {
for (int j = 0; j < a.length; j++) {
if (a[i] == a[j]) {
count++;
}
}
if (count >= a.length/2) {
check = true;
break;
}
count = 0;
}
return check;
}
答案 0 :(得分:0)
在Java 8中,您可以使用Streams
和Collectors
,如下所示:
int[] a = {5,1,3,5,5};
final int n=a.length;
Map<Integer, List<Integer>> x = Arrays.stream(a).boxed().collect(Collectors.groupingBy(i->i));
// System.out.println(x); // {1=[1], 3=[3], 5=[5, 5, 5]}
x.forEach((k,v)->{
if(v.size()>n/2) System.out.println(k); // Check whether you need > or >=
});
请查看上面代码中的注释中的解释。
答案 1 :(得分:0)
boolean masterElement(int[] a) {
int half = a.length / 2;
for (int i = 0; i < half; i++) {
int count = 1;
for (int j = i + 1; j < a.length && count <= half; j++) {
if (a[i] == a[j]) {
count++;
}
}
if (count > half) {
return true;
}
}
return false;
}