zoukankan      html  css  js  c++  java
  • 练手系列(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 }
  • 相关阅读:
    以太坊客户端Geth命令用法
    ubuntu 下载地址
    以太坊(二)安装Solidity编译器
    git 查看&修改用户名
    以太坊(一)
    centos7 时间设置
    centos7 桥接配置
    nginx http转 https
    centOS7 安装mysql5.7
    webpack--关于babel的配置
  • 原文地址:https://www.cnblogs.com/huashui/p/3173229.html
Copyright © 2011-2022 走看看