整数配列があり、1つの数が半分を超えることが知られています.O(n)の複雑さのアルゴリズムでこの数を見つけてください.

1178 ワード


package com.interview.sym;

public class TestCountest {

	/**
	 * @param args
	 *   :         ,               ,  O(n)            。
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int candidate = 1 << 31;
		int vote = 0;
		int arr[] = { 1, 2, 3, 1, 2, 1,2, 1, 1, 5,2, 6 ,2,2,2,2};//              vote  

		for (int i = 0; i < arr.length; i++) {
			if (arr[i] != candidate) {
				if (vote == 0) {
					candidate = arr[i];
				} else {
					vote--;
				}

			} else {
				vote++;
			}
		}
		System.out.print(candidate );
	}

}
/*  :  :                ,      candidate vote,          ,    

             :

 

          ,         1

           ,        1,         0,       ,           

 

                    。

 

        :    ,            ,           ,             ,

               ,      ,          0,    。           

    。
*/