【劍指offer】數組中出現次數超過一半的數字

題目描述
數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度為9的數組{1,2,3,2,2,2,5,4,2}。由于數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0。
解法
如果對每個數字進行遍歷,判斷其出現次數,時間復雜度為O(n^2);
可以先對數組進行排序。
如果一個數字出現的次數超過數組長度的一半,則數組中間的數字一定是該數字。
以中間數字為標準。
遍歷排序后的數組,判斷是否與中間數字相等。如果相等,count++;
代碼:

function MoreThanHalfNum_Solution(numbers) {
    numbers.sort(function (a, b) {
        return b - a;
    })
    var mid = Math.floor(numbers.length / 2);
    var num = numbers[mid];
    var count = 0;
    numbers.forEach(function (val) {
        if (val == num) {
            count++;
        }
    })
    if (count <= mid) {
        return 0;
    } else {
        return num;
    }
}

var numbers = [1,2,3,2,2,2,5,4,2];
console.log(MoreThanHalfNum_Solution(numbers));
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容