題目描述
數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度為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));