求数组中重复最多的数

如题,给出数组{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;ii) {
					maxN=i;
				}
			}
		}
		System.out.println(maxN);
	}

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

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

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

你可能感兴趣的:(算法)