码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA比较器的写法和优先队列的使用

时间:2020-05-31 22:00:15      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:ati   ash   数据   amp   code   turn   筛选   队列   ng2   

1333. Filter Restaurants by Vegan-Friendly, Price and Distance

这道题做的过程中,由于语法不熟悉,花费了大量时间,需要掌握comparator自定义写法。

本题可以

1.用HashMap来存过滤后的数据,然后用自定义的比较器,在list中对符合要求的数据排序。

2.用PriorityQueue,自定义优先队列的排序方式,将筛选后的数据存入优先队列,即可自动有序。

class Solution {
    public List<Integer> filterRestaurants(int[][] restaurants, int veganFriendly, int maxPrice, int maxDistance) {
        Map<Integer, int[]> map = new HashMap<>();
        List<Integer> IDs = new ArrayList<>();
        for(int[] id : restaurants){
            if(id[2] >= veganFriendly && id[3] <= maxPrice && id[4] <= maxDistance){
                map.put(id[0], id);
                IDs.add(id[0]);
            }
        }
        //第一种写法
       /* Collections.sort(IDs, (id1, id2) -> {
            int rating1 = map.get(id1)[1];
            int rating2 = map.get(id2)[1];
            if(rating1 == rating2) return id2-id1;
            return rating2-rating1;
        });
        */
        //第二种写法
        IDs.sort(new Comparator<Integer>(){
            @Override
            public int compare(Integer o1, Integer o2){
                int rating1 = map.get(o1)[1];
                int rating2 = map.get(o2)[1];
                if(rating1 == rating2) return o2-o1;
                return rating2-rating1;
            }
        });
        return IDs;
    }
}

 

class Solution {
    public List<Integer> filterRestaurants(int[][] restaurants, int veganFriendly, int maxPrice, int maxDistance) {
        PriorityQueue<int[]> pq = new PriorityQueue<>((a,b) -> a[1] == b[1] ? b[0]-a[0]:b[1]-a[1]);
        List<Integer> res = new ArrayList<>();
        for(int[] id : restaurants){
            if(id[2] >= veganFriendly && id[3] <= maxPrice && id[4] <= maxDistance)
                pq.add(id);
        }
        while(!pq.isEmpty()) 
            res.add(pq.remove()[0]);
        return res;
    }
}

 

JAVA比较器的写法和优先队列的使用

标签:ati   ash   数据   amp   code   turn   筛选   队列   ng2   

原文地址:https://www.cnblogs.com/yawenw/p/13021519.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!