练手系列(1) 找出数组中重复次数最多的元素并打印详解编程语言

开博第一篇,呵呵,一直在做维护项目,好长时间不写代码了,手都感觉生疏了。以后尽量每天至少一篇练练手。

找出数组中重复次数最多的元素并打印

  1 package test; 
  2  
  3 import java.util.Arrays; 
  4 import java.util.HashMap; 
  5 import java.util.Iterator; 
  6 import java.util.Map; 
  7 import java.util.Map.Entry; 
  8 import java.util.Random; 
  9 import java.util.Set; 
 10  
 11 public class Test { 
 12  
 13     private static int[] arr = new int[1000]; 
 14  
 15     public static void main(String[] args) { 
 16         // 准备数组 
 17         createArray(); 
 18         // 方法一:用Map 
 19         test01(arr); 
 20         test02(arr); 
 21     } 
 22  
 23     /** 
 24      * 首先准备一个长度为1000的数组作为测试对象 
 25      * 通过random类来随机插入整数 
 26      */ 
 27     public static void createArray() { 
 28         Random r = new Random(); 
 29         for (int i = 0; i < 1000; i++) { 
 30             arr[i] = r.nextInt(100); 
 31         } 
 32     } 
 33  
 34     /** 
 35      * 第一个方法是依次读取数组中每个值,把读取到的值和它出现的次数分别作为key和value放到一个Map中去, 
 36      * 读取完成之后,再找到此Map中value值最大的那个key就可以了。 
 37      * @param arr 
 38      */ 
 39     public static void test01(int[] arr) { 
 40         Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 
 41         for (int i = 0; i < arr.length; i++) { 
 42             if (map.containsKey(arr[i])) { 
 43                 // 如果已存在相同的key,则其value值加1 
 44                 map.put(arr[i], map.get(arr[i]) + 1); 
 45             } else { 
 46                 // 如果还没有相同的key,则value值为1并添加到map中 
 47                 map.put(arr[i], 1); 
 48             } 
 49         } 
 50         // 遍歷Map 
 51         Set<Entry<Integer, Integer>> set = map.entrySet(); 
 52         Iterator<Entry<Integer, Integer>> it = set.iterator(); 
 53         int nums = 0;// 定义次数 
 54         int key = 0;// 定义出现次数最多的数 
 55         while (it.hasNext()) { 
 56             Entry<Integer, Integer> entry = it.next(); 
 57             if (entry.getValue() > nums) { 
 58                 nums = entry.getValue(); 
 59                 key = entry.getKey(); 
 60             } 
 61         } 
 62         System.out.println("出现次数最多的数是:" + key + "; 出现了" + nums + "次!"); 
 63     } 
 64      
 65     /** 
 66      * 此方法为先对数组进行排序,然后遍历数组求结果。 
 67      * 不推荐此方法,为了考虑到数组的各种可能状况,写了一个小时,唉,估计还有bug。 
 68      * @param arr 
 69      */ 
 70     public static void test02(int[] arr) { 
 71         // 先对数组进行排序 
 72         Arrays.sort(arr); 
 73         // 排完序之后,进行依次遍历 
 74         int nums = 0;// 定义次数 
 75         int key = 0;// 定义出现次数最多的数 
 76         // 遍历开始 
 77         int i = 1; 
 78         int tmpNums = 1; 
 79         int tmpKey = arr[0]; 
 80         while (i < arr.length) { 
 81             if (arr[i] == tmpKey) { 
 82                 tmpNums++; 
 83             } else { 
 84                 if (tmpNums > nums) { 
 85                     key = tmpKey; 
 86                     nums = tmpNums; 
 87                     tmpKey = arr[i]; 
 88                     tmpNums = 1; 
 89                 } else { 
 90                     if (i < arr.length - 1) { 
 91                         tmpNums = 1; 
 92                         tmpKey = arr[i+1]; 
 93                     } 
 94                 } 
 95             } 
 96             i++; 
 97         } 
 98         // 如果最后几个数都一样且出现的次数最多则进入此if语句 
 99         if (tmpNums > nums) { 
100             key = tmpKey; 
101             nums = tmpNums; 
102         } 
103         // 如果数组中所有数都一样,则进入此if语句 
104         if (nums == 0) { 
105             nums = tmpNums; 
106             key = tmpKey; 
107         } 
108         System.out.println("出现次数最多的数是:" + key + "; 出现了" + nums + "次!"); 
109     } 
110 }

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/19427.html

(0)
上一篇 2021年7月19日 22:10
下一篇 2021年7月19日 22:10

相关推荐

发表回复

登录后才能评论