java找出一个数组中出现次数最多且最大的那个元素
比如,一个数组为:[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 + "次"); } }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 通过 nginx 搞了一个反代,整合 谷歌学术, V2EX ,知乎等搜索的页面
- 下一篇: 数组配对