Java找出一个数组中出现次数最多的那个元素的实现方法

2019-04-07 20:45 阅读 954 次 评论 0 条

比如,一个数组为:[1, 1, 3, 5, 6, 6, 6, 8, 8, 9, 2, 8, 3 ]同时符合最大且次数最多的就是8。

思路:最简单的办法就是采用两层for循环去遍历,时间复杂度为O(n2),其次可以

先用快速排序将数组排序,然后再找次数最多且最大的数,时间复杂度O(NLogN),

第三种方法可以采用HashMap,这种方式时间复杂度为O(N),但是需要空间复杂度O(N)

下面将采用第三种方式:

代码:

package d79;  
  
import java.util.HashMap;  
import java.util.Iterator;  
import java.util.Map;  
import java.util.Map.Entry;  
  
public class MaxCountOfArray {  
  
    public static void main(String[] args) {  
        int[] arr = new int[] { 1, 1, 3, 5, 6, 6, 6, 8, 8, 9, 2,8, 3 };  
        Map<Integer, Integer> map = new HashMap<Integer,Integer>();  
        for (int i = 0; i < arr.length; i++) {  
            if (map.containsKey(arr[i])) {  
                map.put(arr[i], map.get(arr[i]) + 1);  
            } else {  
                map.put(arr[i], 0);  
            }  
  
        }  
        int count=-1;  
        int max=Integer.MIN_VALUE;  
        Iterator<Entry<Integer, Integer>> iter = map.entrySet().iterator();  
        while (iter.hasNext()) {  
            Map.Entry<Integer,Integer> entry =  iter.next();  
            if (entry.getValue()>count||(entry.getValue()==count&&entry.getKey()>max)) {  
                max=entry.getKey();  
                count=entry.getValue();  
            }  
        }  
  
        System.out.println(max);  
  
    }  
  
}

实现找出数组中一个数字出现次数最多的数字

代码:

public class MaxCountOfArray {  
    /** 
     * 找出一个数组中一个数字出现次数最多的数字 用HashMap的key来存放数组中存在的数字,value存放该数字在数组中出现的次数 
     */  
    public static void main(String[] args) {  
  
        int[] array = { 2, 1, 2, 3, 4, 5, 2, 2, 2, 2 };  
  
        // map的key存放数组中存在的数字,value存放该数字在数组中出现的次数  
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();  
  
        for (int i = 0; i < array.length; i++) {  
            if (map.containsKey(array[i])) {  
                int temp = map.get(array[i]);  
  
                map.put(array[i], temp + 1);  
            } else {  
                map.put(array[i], 1);  
            }  
        }  
  
        Collection<Integer> count = map.values();  
  
        // 找出map的value中最大的数字,也就是数组中数字出现最多的次数  
        int maxCount = Collections.max(count);  
  
        int maxNumber = 0;  
  
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {  
            // 得到value为maxCount的key,也就是数组中出现次数最多的数字  
            if (maxCount == entry.getValue()) {  
                maxNumber = entry.getKey();  
            }  
        }  
  
        System.out.println("出现次数最多的数字为:" + maxNumber);  
        System.out.println("该数字一共出现" + maxCount + "次");  
    }  
}

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:Java找出一个数组中出现次数最多的那个元素的实现方法 | 雨晨博客
分类:JAVA, 程序笔记 标签:

发表评论


表情