练手系列(1) 找出数组中反复次数最多的元素并打印

    添加时间:2013-7-5 点击量:

    开博第一篇,呵呵,一向在做保护项目,好长时候不写代码了,手都感触感染陌生了。今后尽量天天至少一篇练练手。



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





      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 forint 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 forint 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 }



    彼此相爱,却不要让爱成了束缚:不如让它成为涌动的大海,两岸乃是你们的灵魂。互斟满杯,却不要同饮一杯。相赠面包,却不要共食一个。一起歌舞欢喜,却依然各自独立,相互交心,却不是让对方收藏。因为唯有生命之手,方能收容你们的心。站在一起却不要过于靠近。—— 纪伯伦《先知》
    分享到: