求数组中重复最多的数

如题,给出数组{2,5,2,4,3,3,9,6},求其中重复最多的数。若有几个数重复次数相同,则取数值最小的。

先给出代码,再说思路。

public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a[]=new int[]{2,5,2,4,3,3,9,6};
		int b[]=new int[10];//其中所有元素初始为0
		int max=0;//存储最大重复次数
		int maxN=0;//存储最大重复次数对应索引
		for(int i=0;i<a.length;i++) {
			b[a[i]]++;
		}
		max=b[0];
		for(int i=0;i<10;i++) {
			if(max<b[i]) {
				max=b[i];
				maxN=i;
			}else if(max==b[i]) {
				if(maxN>i) {
					maxN=i;
				}
			}
		}
		System.out.println(maxN);
	}

其实最开始我想的时候,想要扫描N次,每次扫描都得到其中一个数值的重复次数,并将其放入一个容器,再将该数的数值放入一个容器。每次扫描结束根据情况更新便可。

但是这样做的结果是时间复杂度大,而且麻烦。并且数组其实提供给我们两个信息可以使用,一个是内容,一个是对应索引,如果我们这样做,只使用了数组的内容。

因此我们可以创建一个数组长度为10的数组,索引0对应的空间存放0出现的次数,其他也是如此。这样下来我们便只需要扫描整个数组一遍,使用b[a[i]]++实时增加重复次数。最后找出其中最大值,取索引。若遇到相同最大值,则取较小索引便可。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值