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

Java 中,不让用 sort()的情况下如何按照多个指标排布一个 dict 当中的前 n 个?

  •  
  •   8e47e42 · 2020-02-21 09:32:32 +08:00 · 1251 次点击
    这是一个创建于 1736 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题问。有一个 dict,key=名字,value=成绩,取前五,如何在不使用 sort()的情况下:
    取整所有数据的成绩的前五
    先按成绩高到低排列
    再按名字首字母排序

    附加条件:不能用 sort()
    8 条回复    2020-02-21 14:43:41 +08:00
    micean
        1
    micean  
       2020-02-21 09:39:17 +08:00   ❤️ 1
    public PriorityQueue(int initialCapacity, Comparator<? super E> comparator){}

    这个?
    jmc891205
        2
    jmc891205  
       2020-02-21 10:25:13 +08:00 via iPhone
    遍历一遍不就把前五找出来了?
    siyemiaokube
        3
    siyemiaokube  
       2020-02-21 13:35:53 +08:00 via iPhone   ❤️ 1
    我觉得不让用某种抽象方法的题目都是 sb 题。
    可以考虑用字典树来完成,本质也是排序的具体实现。
    Ericcccccccc
        4
    Ericcccccccc  
       2020-02-21 13:37:22 +08:00
    遍历
    Ericcccccccc
        5
    Ericcccccccc  
       2020-02-21 13:38:29 +08:00   ❤️ 1
    不能用 sort 这个条件相当奇怪, 那去往上找个快排的代码自己实现一个可以吗?

    干这个事情本质不还是排序? (比大小本身不就是一种排序行为吗)
    8e47e42
        6
    8e47e42  
    OP
       2020-02-21 13:42:32 +08:00
    @Ericcccccccc
    @siyemiaokube
    不能用 sort 给的 comments 大概的意思是如果只求最前面 5 个不需要去 sort 整个列表,是真的有点沙雕的要求。。
    lhx2008
        7
    lhx2008  
       2020-02-21 13:47:38 +08:00 via Android
    PRIOTYQUEUE 就行,comparator 写一下
    ym1ng
        8
    ym1ng  
       2020-02-21 14:43:41 +08:00
    应该是 top k 问题的变形?不让排序的话 一般就是用堆来实现了吧(逃
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4576 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 09:53 · PVG 17:53 · LAX 01:53 · JFK 04:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.