1. 程式人生 > >劍指offer____陣列中出現次數超過一半的數字

劍指offer____陣列中出現次數超過一半的數字

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

class Solution {
public:
    bool CheckHalfNum(vector<int> numbers,int result)
    {
        unsigned long times = 0;
        for(unsigned long i = 0; i < numbers.size(); ++i)
        {
            if(numbers[i] == result)
            {
                times++;
            }
        }
        bool isMoreHalf = true;
        if(times *2 <= numbers.size())
        {
            isMoreHalf = false;
        }
        return isMoreHalf;
    }
    int MoreThanHalfNum_Solution(vector<int> numbers) 
    {
        if(numbers.size() == 0) return 0;
        int result = numbers[0];
        int times = 1;
        for(unsigned long i = 1; i < numbers.size(); ++i)
        {
            if(times == 0)
            {
                result = numbers[i];
                times = 1;
            }
            else if(numbers[i] == result)
            {
                times++;
            }
            else
            {
                times--;
            }
        }
        if(!CheckHalfNum(numbers,result))
        {
            result = 0;
        }
        return result;
    }
};