JAVA比較器的寫法和優先隊列的使用


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) -> b[1] == a[1]? b[0] - a[0]: b[1]-a[1])
        PriorityQueue<int[]> pq = new PriorityQueue<>(new Comparator<int[]>(){
            @Override
            public int compare(int[] o1, int[] o2){
                if(o1[1] == o2[1]) return o2[0]-o1[0];
                return o2[1]-o1[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;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM