數組中出現次數大於一半的數字

題目描述

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

劍指offert書中給出答案比較簡單,根據數組的特徵來統計

class Solution {
public:
    int MoreThanHalfNum_Solution(vector<int> numbers) {
        //判斷是否爲空
        int n = numbers.size();
        if (n == 0) return 0;
        //由於數字出現超過一半,故從第一個數字開始計數,若下一個數字等於當前數字,則計數加一,否則,減一。若爲零,則從當前數字開始計數,將數字替換成當前數字,且設計數爲1.
        int num = numbers[0], count = 1;
        for (int i = 1; i < n; i++) {
            if (numbers[i] == num) count++;
            else count--;
            if (count == 0) {
                num = numbers[i];
                count = 1;
            }
        }
        // 找到大於一半的數字後,開始計數
        count = 0;
        for (int i = 0; i < n; i++) {
            if (numbers[i] == num) count++;
        }
        //保證計數大於一半
        if (count * 2 > n) return num;
        return 0;
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章