概述
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
例如输入一个长度为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进行对比即可。
最后
以上就是故意红牛为你收集整理的js:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字的全部内容,希望文章能够帮你解决js:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复