js:數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字

題目:數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。

       例如輸入一個長度爲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進行對比即可。

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