題目:數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。
例如輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2}。由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0。
一、解題思路
1.定義一個輔助數組 zero ,裏面全是0;
2.循環輸入的數組 arr ,將 arr 每個位置的值(arr[i])對應到輔助數組zero裏的每個位置,使之++。
即 如果arr[1]的值是2,就對應到zero[2],使zero[2]的值++;……;如果arr[5]的值又是2,就再對應到zero[2],使zero[2]的值++;
3.循環輔助數組 zero,將其中的數與 arr長度的一半作比較,如果大於則輸出該數的位置。即如果 arr.length/2 == 3,zero[3] == 4,則輸出3。
二、代碼
function arrCount(arr){
var count = arr.length/2;
var zero = [0];
var res = 0;
if (arr.length == 0) {
console.log("This arr is null!");
return;
}
// 輔助數組的長度應該等於原數組中的最大值
for(let i = 0; i <= Math.max.apply(null,arr); i++){
zero[i] = 0;
}
for(let i = 0; i < arr.length; i++){
var j = arr[i];
zero[j]++;
}
for(let i = 0; i < zero.length; i++){
if (zero[i]>count) {
res = i;
}
}
console.log(res);
// console.log(zero);
}
var arr = [1,2,1,7,7,7,7,8,7,7];
arrCount(arr);
三、其他
我覺得用HashMap做也可以,key爲數組的數字,value爲數字重複的次數,最後找出重複次數最多的那個,再將value的值與arr.length/2進行對比即可。