Java 在数组中查找主元素的有效算法?

Java 在数组中查找主元素的有效算法?,java,arrays,Java,Arrays,我试图找出一个包含N个整数的给定数组是否有一个“主元素”。此数组的主元素是在数组中出现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 chec

我试图找出一个包含N个整数的给定数组是否有一个“主元素”。此数组的主元素是在数组中出现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;
}
布尔主元素(int[]a){
整数计数=0;
布尔检查=假;
对于(inti=0;i=a.length/2){
检查=正确;
打破
}
计数=0;
}
退货检查;
}

在Java 8中,您可以像这样使用
收集器

    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 >=
    });
int[]a={5,1,3,5,5};
最终整数n=a.长度;
Map 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);//检查是否需要>或>=
});
请看上面代码注释中的解释

布尔主元素(int[]a){
    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;
}
int half=a.长度/2; 对于(int i=0;i
到目前为止你都试了些什么?为什么不先自己试一下呢对不起,我的数学知识很好,但这是否意味着主元素就是数组中被提到过3次或3次以上的元素?@Draken,根据上面的定义,超过n/2意味着
{1,1,2,2}
没有主元素我已经发布了我的代码,确定主元素的数量并不重要,只是有或并没有主元素。