zoukankan      html  css  js  c++  java
  • 面试常备题(四)---统计数组中出现的所有数字的个数

          这道题目非常常见,一拿到手,首先想到的就是有序和无序,如果是无序,可以先转化为有序,但仔细一想,发现这样不对啊!就算排完序,还是得一个一个比较,然后统计不重复的数字的个数!干脆一开始就比较算了。。。

          所以我们可以这样解:

         public static void search(int[] array) {
            int len = array.length;
            for (int i = 0; i < len; i++) {
                if (list.indexOf(array[i]) == -1) {
                    list.add(array[i]);
                    map.put(array[i], 1);
                } else {
                    int num = map.get(array[i]) + 1;
                    map.put(array[i], num);
                }
            }
            Set keys = map.keySet();
            Iterator iterator = keys.iterator();
            while (iterator.hasNext()) {
                Integer key = (Integer) iterator.next();
                System.out.println(key + "出现的次数: " + map.get(key));
            }
        }

          既然是统计不重复的数字的个数,使用Map比较好,但如何知道Map的Key值到底有没有重复呢?这里我用一个List的IndexOf()方法来确保Key值不是重复的。

          但问题来了:我们新建一个List来存储元素,就是为了调用它的一个方法:IndexOf(),这样好吗?

          答案当然是不好的!效率非常低,但Map到底有没有方法来确保它的Key值是唯一的呢?本来Map的实现就是无论如何Key都是唯一的,但我们的重点就是如何修改Key的Value值,前面还得判断该Key是否已在Map的KeySet中?

           有一种利用异常的方法:

        public static void search(int[] array) {
            int len = array.length;
            int num = 0;
            for (int i = 0; i < len; i++) {
                try {
                    num = map.get(array[i]);
                } catch (Exception e) {
                    map.put(array[i], 1);
                    continue;
                }
                map.put(array[i], num + 1);
            }
            Set keys = map.keySet();
            Iterator iterator = keys.iterator();
            while (iterator.hasNext()) {
                Integer key = (Integer) iterator.next();
                System.out.println(key + "出现的次数: " + map.get(key));
            }
        }

          利用NullPointException来确定是否有该Key。

          当然,我们可以遍历KeySet来确定是否有该Key,但每一次都要这么搞吗?这不是和List的做法是一样的?

          有没有更好的想法呢?基于Map的Key-Value机制上来确认Key值是否已经存在,前提是不需要遍历KeySet?

          跪求大神指导。。。
      

          

           
           

  • 相关阅读:
    unable to retrieve container logs for docker kubernetes
    Restart container within pod
    Kubernetes1.3:POD生命周期管理
    Options of the DB storage of prometheus
    prometheus重启hang住问题记录
    prometheus交流资源
    nc 从服务器上传下载文件
    负载均衡监控需求
    prometheus消耗内存问题
    10.Docker 镜像使用
  • 原文地址:https://www.cnblogs.com/wenjiang/p/3210346.html
Copyright © 2011-2022 走看看