查找数组中数量过半元素

1.编程之美中发帖问题

如何在O(n)时间内找到发帖过半的人,或者在一个数组中找到数量过半的元素

例如:4 4 1 2 4 3 4

过半元素为4;

该算法必须在保证有过半元素的情况下,才能找到所需元素;否者。。。

import java.util.Scanner;
/**
 * 查找数组中数量过半的元素
 * @author dell
 *
 */
public class Main10 {

    private boolean flag=true;
    
    private int findHalfMaxValue(int[] numb){
        int length=numb.length;
        int nTimes,i,value=0;
        for(i=nTimes=0;i<length;i++){
            if(nTimes==0){
                value=numb[i];
                nTimes++;
            }else{
                if(numb[i]==value)
                    nTimes++;
                else
                    nTimes--;
            }
        }
        return value;
    }
    public static void main(String[] args){
        Main10 main10=new Main10();
        //测试数据4 4 1 2 4 3 4
        System.out.println("开始。。。");
        Scanner scanner=new Scanner(System.in);
        int n;//数组长度
        int[] numb;
        while(scanner.hasNext()){
            n=scanner.nextInt();
            if(n<=0){
                System.out.println("输入N不合法,默认值为10");
                n=10;
            }else{
                numb=new int[n];
                for(int i=0;i<n;i++){
                    System.out.println("输入元素");
                    numb[i]=scanner.nextInt();
                }
                int value=main10.findHalfMaxValue(numb);
                System.out.println("过半元素为:"+value);
            }
        }
    }
}
原文地址:https://www.cnblogs.com/csxf/p/3584691.html