【劍指offer-解題系列(29)】數組中出現次數超過一半的數

題目描述

數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2}。由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0。

分析

採用網上大家建議的方法,也就是使用計數器+儲存值的方法,一旦計數器爲0,那就把儲存值變成現在的數字,這個方法只能解決這個序列一定有該數字存在的情況下的結果,如果這個數字不存在,這個算法就不能得出正確的結果,所以還需要再重新遍歷一次數組,看這個最後的儲存值是不是出現了一半以上。


代碼實現

    int MoreThanHalfNum_Solution (vector<int> numbers) {
        int value = 0;
        int count = 0;
        
        for(int i =0;i<numbers.size();i++ ){
            if(count == 0){
                value = numbers[i];
                count++;
            }
            else if(value == numbers[i]){
                count++;
            }
            else {
                count--;
            }
            
        } 
        int times=0;
        for(int i =0;i<numbers.size();i++ ){
            if(value==numbers[i]){
                times++;
            }
        }
        if(times>numbers.size()/2)
        return value; 
        else
            return 0;
            
    }

發佈了81 篇原創文章 · 獲贊 19 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章