离线双指针和在线二分
每一个查询的最大美丽值
给你一个二维整数数组items
,其中items[i] = [pricei, beautyi]
分别表示每一个物品的 价格 和 美丽值 。
同时给你一个下标从0
开始的整数数组queries
。对于每个查询queries[j]
,你想求出价格小于等于queries[j]
的物品中,最大的美丽值
是多少。如果不存在符合条件的物品,那么查询的结果为0
。
请你返回一个长度与queries
相同的数组answer
,其中answer[j]
是第j
个查询的答案。
离线算法 + 双指针
离线算法:将queries进行排序,通过改变回答询问的顺序,使得我们可以结合双指针来解决问题。
如果queries已经从小到大排好序了,那么就很好求解,使用双指针即可。但是queries是乱序的,返回值需要按照queries的顺序返回,我们可以额外创建一个数组idx
,记录queries的下标,然后对idx按照queries[idx]的值进行从小到大的排序,遍历idx
数组即可。
1 | def maximumBeauty(self, items: List[List[int]], queries: List[int]) -> List[int]: |
在线算法 + 二分查找
- 先对items进行排序
- 然后每个items[i]的美丽值变为从items[0]到items[i]的美丽值的最大值
- 然后遍历queries,对于每一个查询,我们可以使用二分查找找到最后一个价格小于等于queries[j]的物品,该物品的美丽值就是我们要求的答案。
1 | def maximumBeauty(self, items: List[List[int]], queries: List[int]) -> List[int]: |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 冰红茶怪兽!