# 2070. Most Beautiful Item for Each Query ###### tags: `Leetcode` `Medium` `Sorting` `TreeMap` Link: https://leetcode.com/problems/most-beautiful-item-for-each-query/description/ ## 思路 ### Sorting + Two Pointers 把items和queries都从小到大排列 两个指针分别指items和queries 在移动queries指针的时候items指针也会跟着向右移动 持续记录最大值即可 ### TreeMap 先sort items 然后把每个entry的price和当前最大的beauty存进去 对于每一个query只要找floorEntry就可以 ## Code ### Sorting + Two Pointers ```java= class Solution { public int[] maximumBeauty(int[][] items, int[] queries) { int n = queries.length; int m = items.length; Arrays.sort(items, (a,b)->(a[0]-b[0])); int[][] queriesIdx = new int[n][2]; for(int i=0; i<n; i++){ queriesIdx[i][0] = queries[i]; queriesIdx[i][1] = i; } Arrays.sort(queriesIdx, (a,b)->(a[0]-b[0])); int[] ans = new int[n]; int j = 0; int currMax = 0; for(int i=0; i<n; i++){ while(j<m && items[j][0]<=queriesIdx[i][0]){ currMax = Math.max(currMax, items[j][1]); j++; } ans[queriesIdx[i][1]] = currMax; } return ans; } } ``` ### TreeMap ```java= class Solution { public int[] maximumBeauty(int[][] items, int[] queries) { TreeMap<Integer, Integer> map = new TreeMap<>(); Arrays.sort(items, (a,b)->(a[0]-b[0])); int currMax = 0; map.put(0, 0); for(int[] item:items){ currMax = Math.max(currMax, item[1]); map.put(item[0], currMax); } int[] ans = new int[queries.length]; for(int i=0; i<queries.length; i++){ ans[i] = map.floorEntry(queries[i]).getValue(); } return ans; } } ```