JavaScript--《剑指offer》-题二十七

来源:互联网 发布:mac双系统移除win8后 编辑:程序博客网 时间:2024/05/29 11:05

题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

我的代码

function MoreThanHalfNum_Solution(numbers){  var sorarr=numbers.sort();  var halfarr=[];  var num=0;  var half= Math.ceil(numbers.length/2);  for(var i=0;i<half;i++){    halfarr.push(sorarr[i]);}function halfNum(array){  if(array[0]===array[half-1]){     return array[0];}   array=array.slice(1);   array.push(sorarr[half+num]);    num++;    if(num===numbers.length-half){       return 0;    }  return halfNum(array);}    return halfNum(halfarr);}//14ms  5296k

分析:先把原始数组排序。然后把原始的数组划分出大于一半的数组,既这个数组的长度为原数组的一半,然后比较这个数组的第一项和最后一项是否相等,要是相等则这个数组里的数已经满足题目要求,要是不满足,则这个数组的数往后面移一项,一直到最后,还是不满足就返回0,表示这个数组里面没有满足要求的数字。

原创粉丝点击