查找数组中数量过半元素
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); } } } }