V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jinYangChen
V2EX  ›  问与答

一支穿云箭 千军万马来相见

  •  
  •   jinYangChen · 2018-08-10 11:52:42 +08:00 · 604 次点击
    这是一个创建于 2136 天前的主题,其中的信息可能已经有所发展或是发生改变。

    找出目标数组中重复出现次数最少的两个数,求一个好点的思路,考虑效率问题
    目前我的思路是:

    int[] target = {7, 9, 8, 7, 8, 9, 7, 8, 8, 4, 9, 8, 3, 4, 2, 3, 1, 1, 1, 2, 1};
    //声明 map 容器
    Map<Integer, Integer> maps = new TreeMap<>();
    for (int i = 0; i < target.length; i++) {
       int value = target[i];
       //判断该值在 map 里面是否存在
       if (maps.containsKey(value)) {
          //加 1
          maps.replace(value, maps.get(value), maps.get(value) + 1);
       } else {
          maps.put(value, 1);
       }
    }
    //把 map 转 list
    List<Map.Entry<Integer, Integer>> list = new ArrayList<>(maps.entrySet());
    //自定义排序
    Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
       @Override
       public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
           return o1.getValue().compareTo(o2.getValue());
       }
    });
    System.out.println("重复出现次数最小的两个数分别为:" + list.get(0).getKey() + "," + list.get(1).getKey());
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   928 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 21:14 · PVG 05:14 · LAX 14:14 · JFK 17:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.