java 求数组中重复元素最多的数 空间换时间解法 Map映射表法

来源:互联网 发布:手机比特币挖矿软件 编辑:程序博客网 时间:2024/06/05 00:10
  找出数组中重复元素最多的数:

   两种方法: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 {//采用空间换时间:privatestatic voidmethod1(int array[]) {int n=array.length;//count用来存放元素的个数,并将count初始化都为0.int count[]=new int[100];  //注意:array的元素值,只能是0——99for (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为1map.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);}}


运行结果:

                          


0 0
原创粉丝点击