有序数组找到出现次数最高的元素和次数

算法不难,就是用个变量分别存储已经遍历到的元素中,出现次数最多的元素和次数。在遍历过程中统计目前遍历的元素的次数,在遍历到的元素变化时,把上个元素次数和之前存储的最大次数比较,保留最大的次数和对应的元素。注意最后一个元素需要单独比较。本算法只针对已经排序好的数组。Java实现如下:

public class TestAndDel {
	
   static void findmost(int[] array){
	   Arrays.sort(array);
	   int lastEle=array[0];
	   int maxTime=0;
	   int presentTime=1;
	   int maxEle=array[0];
	   
	   for(int i=1;i<array.length;i++)
	   {
		   if(array[i]==lastEle)
			   presentTime++;
		   else
		   {
			   if(presentTime>maxTime)
			   {
				   maxTime=presentTime;
				   maxEle=lastEle;
			   }
			   lastEle=array[i];
			   presentTime=1;
		   }
		   
		   if(i==array.length-1 && presentTime>maxTime)//  考虑到比较到最大的元素(排在最后的元素),需要在循环推出前比较一次
		   {
			   maxTime=presentTime;
			   maxEle=lastEle;
		   }   
		   
	   }
	  System.out.println("出现次数最多的元素"+maxEle+" "+"出现的次数"+maxTime);
    }
	 
    public static void main(String args[]) {
    	
    	int[] array= {1,2,4,4,1,9,2,2,7,4,2,4,2,9,9,9,9,0,9,4};
    	TestAndDel.findmost(array);	
    }
   
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值