剣指offer 26--配列中の回数が半分を超える数字

1322 ワード

テーマ:配列の中で1つの数字が出現する回数は配列の長さの半分を上回って、この数字を探し出して下さい
これは編纂する時比較的に簡単で、主に1つの思想の問題です
package   offer;
/*  :                      ,       */

/*                      ,                          。
 *                      :            ,      。      
 *  ~      ,                   ,    l :           
 *       ,  ,    1 。      ,           ,      1 。  
 *                              ,                
 *    1       。*/
public class Test29 {
	public static int findMushNumber(int []array){
        //     
        if (array == null || array.length < 1) {
            throw new IllegalArgumentException("ERROR");
        }
		
		//            
		int temp = array[0];
		int tempnum = 1;
		
		//           
		for(int i = 1; i < array.length; i++){
			if(temp == array[i]){
				tempnum++;
			}else if(temp != array[i]){
				if(tempnum == 1){
					//          ,                1
					temp = array[i];
				}else if(tempnum > 1){
					tempnum--;
				}
			}
			
		}
		return temp;
	}
	
	public static void main(String args[]){
		int a[] = { 1, 2, 3, 4, 4, 4, 2, 4, 4};
		int b[] = { 1, 9, 9, 4, 9, 8, 9, 9, 2};
		System.out.println("The mush number is:"+findMushNumber(a));
		System.out.println("The mush number is:"+findMushNumber(b));
	}
}

やはり境界状況に注意しなければならない.