设计思路:给数组排序,由于众数出现次数大于n/2,所以第n/2个元素就是众数。
function mostNum(arr){ var arr2 = arr.sort((a,b)=>{return b-a;}); var zhong = arr[parseInt(arr.length/2)]; return zhong; }设计思路:给定一个数组[32,34,32,12,78,32]
用第一个元素跟之后的所有元素比较,如果两个元素相等,计时器count+1,并删除这个相同元素。比较完成后,把count追加到result中。
这样第二个元素就一定跟第一个元素不相等,计数器归1,用第二元素跟之后元素相比,重复上个步骤。
最后数组arr剩余的元素均不重复。
result中的元素跟arr中的元素一一对应,result元素就是arr中对应元素出现的次数。俩数组长度相同。result中大于n/2的就是众数出现次数,它的index就是arr中众数的index。如果没有就是没有众数。
function mostNum(arr){ var halfArr = arr.length/2;//获取数组长度的二分之一 var result=[];//用来存放arr元素出现次数 console.log('数组长度为:'+arr.length);//打印arr长度 for(j=0;j<arr.length;j++){//获取arr第j项元素 var count=1;//声明计数器 for(i=j+1;i<halfArr*2;i++){//用arr的第j项跟arrj+1之后的项相比较 if(arr[i]==arr[j]){//判断如果相同 count++;//计数器+1 arr.splice(i,1);//删除这个元素的重复项,只保留第一个,splice从第i项开始删除,删除一个元素 i--;//由于第i项被删除,第i+1项会变成第i项,所以需要重新判断 } } result.push(count);//把计数结果添加到result数组中 } console.log('数组result:'+result);//打印result最终结果 console.log('数组arr:'+arr);//输出arr去除重复项后的数组 var zhong=''; if(result.some((value,index)=>{return value>=halfArr;})==false){//判断是否存在众数 zhong = '没有众数'; }else { result.some(function(value,index){//数组遍历 if(value>=halfArr){//如果计数结果中有大于arr数组一半的值,那这个值就是众数的计数结果 console.log(arr[index]); zhong = '众数是:'+arr[index]+'<br>'+'众数出现的次数:'+value; } }); } return zhong; }