找出数组中重复元素最多的数:
两种方法:1.采用空间换时间:该方法浪费内存,建议不要使用
2.使用Map映射表
package datastruct.usearray;
import java.awt.Container;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
public class FindMostRepeatEle {
//采用空间换时间:
private static void method1(int array[]) {
int n=array.length;
//count用来存放元素的个数,并将count初始化都为0.
int count[]=new int[100]; //注意:array的元素值,只能是0——99
for (int i = 0; i < n; i++) {
count[array[i]]++; //array的元素值,作为count的下标,这样就可以得到重复的个数
}
int maxCount=Integer.MIN_VALUE;//最大的重复个数
int max=Integer.MIN_VALUE;//记录count的下标,即:array[]中的数值
for (int i = 0; i < 100; i++) {
if (count[i]>=maxCount) {
maxCount=count[i];
max=i;
}
}
System.out.println("方法一:重复元素最多的数为:"+max+" 重复了"+maxCount+"次");
}
//采用map映射表的方法:利用key是唯一的记录数组的元素,利用value记录该元素的个数
private static void method2(int array[]){
Map<Integer, Integer> map=new HashMap<Integer, Integer>();
for (int i = 0; i < array.length; i++) {
// 将数组元素加入到map中
if (map.containsKey(array[i])) {
//若map包含该元素,则value加1,否则value为1
map.put(array[i], map.get(array[i])+1);
}else {
map.put(array[i], 1);
}
}
Iterator iterator=map.entrySet().iterator();
// 迭代器找到value最大值,即为:重复元素最多的个数
int maxCount=Integer.MIN_VALUE;//记录出现次数最多的个数
int max=Integer.MIN_VALUE; //记录某个出现最多次数的元素
while (iterator.hasNext()) {
Map.Entry entry=(Entry) iterator.next();
int key=(int) entry.getKey();
int val=(int) entry.getValue();
if (val>maxCount) {
maxCount=val;
max=key;
}
}
System.out.println("方法二:重复元素最多的数为:"+max+" 重复了"+maxCount+"次");
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("输入数组元素个数:");
int n=scanner.nextInt();
System.out.println("输入"+n+"个数组元素:");
int array[]=new int [n];
for (int i = 0; i <n; i++) {
array[i]=scanner.nextInt();
}
method1(array);
method2(array);
}
}
运行结果: