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

本文介绍了一种利用快速排序算法查找数组中出现次数超过数组长度一半的元素的方法。通过随机选择基准元素进行分区,调整左右边界,最终定位到目标元素。文章详细展示了算法的实现过程,包括分区函数和多数元素查找函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路:利用快速排序,次数超过长度一半那么必然位于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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值