时间效率优化之39题 数组中出现次数超过一半的数字

思路:利用快速排序,次数超过长度一半那么必然位于middle右侧或者middle的位置

var swapQuictSort=(array,left,right)=>{
        var aux=array[left];
        array[left]=array[right];
        array[right]=aux;
       console.log(array+" \n ")
		};
		// 快速排序
	    var partition=(array,left,right)=>{
	    var len=array.length;
	    // 从数组中随机选取一个数字
        var pivot=array[Math.floor(Math.random()*len)],
        i=left,
        j=right;
        document.write(pivot);
        while(i<=j){
           while(array[i]<pivot){
           	i++;
           }
           while(array[j]>pivot){
           	j--;
           }
           if(i<=j){
           	swapQuictSort(array,i,j);
           	i++;
           	j--;
           }
        }
         return i;
	    };

		//找出长度超过数组长度一半的数字,
	var MoreThanNumber=(array)=>{
     if(!array){
     	return;
     }
     var len=array.length;
     var middle=Math.floor(len/2);
     
     var left=0;
     var right=len-1;
     var arr1=partition(array,left,right);
     while(arr1!=middle){
     	if(arr1>middle){
     		right=arr1-1;
     		 arr1=partition(array,left,right);
     	}else{
     		left=arr1+1;
            arr1=partition(array,left,right)
     	}

     }
   
     var result=array[middle];
     var count=0;
     // 没有找到的话
     var times=array.reduce((array,result)=>{
      for(result in array){
       count++;

      }
      if(count<middle){
      	return;
      }
       console.log(array);
     return result;
     });
    
		
	}
	var array=[1,2,2,3,2,2,4,4,4,4];
	var pp=MoreThanNumber(array);
	
    console.log(pp);

猜你喜欢

转载自blog.csdn.net/qq_23864401/article/details/87926150