力扣(LeetCode)1333. 餐厅过滤器(C++)

news/2024/7/3 8:26:11
优先队列

请读者读题,应该会发现两个重点:过滤器排序。大家有没有发现这个效果,有点像xx点评: 大家选店一般在口味/距离/价格能接受的前提下,选评分最高的那家店hh,这就是过滤器的效果。排序是说,对满足心理预期的店子,按 rating 从高到低排序,店子的rating 相同时,按照 id 从高到低排序。

算法流程

  • 维护优先队列(大根堆),存放 {rating, id} !!
  • 正序遍历 restaurant ,设置过滤器(条件语句)跳过不符合要求的店子,如果店子符合要求,则向优先队列存入当前店子的 {rating, id}
  • 遍历结束,优先队列存放店子的顺序就是答案:

过滤器筛选过的店子,按 rating 从高到低排序,店子的rating 相同时,按照 id 从高到低排序。

class Solution {
public:
    vector<int> filterRestaurants(vector<vector<int>>& restaurants, int veganFriendly, int maxPrice, int maxDistance) {
        priority_queue<pair<int, int>> pq;
        for (vector<int> &restaurant : restaurants) {
            int id = restaurant[0], rating = restaurant[1], veganF = restaurant[2], price = restaurant[3];
            int distance = restaurant[4];
            if (veganFriendly){
                if (!veganF) continue;
            }
            if (price > maxPrice || distance > maxDistance) continue;
            pq.push({rating, id});
        }
        vector<int> ans;
        while (pq.size()) {
            ans.push_back(pq.top().second);
            pq.pop();
        }
        return ans;
    }
};

时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn) : n n n 是餐厅数量( r e s t a u r a n t s . s i z e ( ) restaurants.size() restaurants.size()),遍历 r e s t a u r a n t restaurant restaurant 同时维护优先队列的时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)
空间复杂度 O ( n ) O(n) O(n) : 优先队列 p q pq pq 的最坏空间复杂度 O ( n ) O(n) O(n)

AC

ac

致语
  • 理解思路很重要
  • 读者有问题请留言,清墨看到就会回复的。

http://lihuaxi.xjx100.cn/news/1577230.html

相关文章

01-工具篇-windows与linux文件共享

一般来说绝大部分PC上装的系统均是windows&#xff0c;为了开发linux程序&#xff0c;会在PC上安装一个Vmware的虚拟机&#xff0c;在虚拟机上安装ubuntu18.04&#xff0c;由于windows上的代码查看软件、浏览器&#xff0c;通信软件更全&#xff0c;我们想只用ubuntu进行编译&a…

2.安装conda python库

centos 显卡驱动、cuda、cudnn安装参考地址&#xff1a; 1.centos7 安装显卡驱动、cuda、cudnn-CSDN博客 1.安装anaconda 步骤1&#xff1a;下载 下载地址&#xff1a; Index of / 下载版本 步骤2&#xff1a;运行 sh Anaconda3-2021.05-Linux-x86_64.sh 一路执行回车&…

单例模式:饿汉式

单例模式全局仅一个实例&#xff0c;用于获取公共的内容 头文件mglobalinfomgr.h class MGlobalInfoMgr {MGlobalInfoMgr();~MGlobalInfoMgr(); public:static MGlobalInfoMgr* GetInstance(); private:static MGlobalInfoMgr* _instance; }; 源文件mglobalinfomgr.cpp MGl…

API接口文档1688阿里巴巴获取跨境属性数据

API接口文档的作用和意义&#xff1a; 明确需要的接口服务 API分为很多种&#xff0c;最基础也是产品最需要的诸如短信API&#xff0c;地图API&#xff0c;语音API等&#xff0c;如果我们的产品涉及到此方面的功能&#xff0c;那就必须了解这方面的API以便于在需求设计阶段考…

阿里云服务器企业级独享和共享型有什么区别?

阿里云ECS云服务器共享型和企业级有什么区别&#xff1f;企业级就是独享型&#xff0c;共享型和企业级云的主要区别CPU调度模式&#xff0c;共享型是非绑定CPU调度模式&#xff0c;企业级是固定CPU调度模式&#xff0c;共享型云服务器在高负载时计算性能可能出现波动不稳定&…

5153. 删除

题目&#xff1a; 样例1&#xff1a; 输入 3454 输出 YES 344 样例2&#xff1a; 输入 10 输出 YES 0 样例3&#xff1a; 输入 111111 输出 NO 思路&#xff1a; 这道题就三个条件 关键条件是 能够被 8 整除。 而能被 8 整除的有一个重要的性质是 能够被 8 整除的重要…

CDS(一)

Core Data Services 核心数据服务 DDL 定义Query Language 查询DCL 控制&#xff08;权限相关&#xff09;model&#xff0c;从语义层获取数据open SQL 访问CDS viewCDS权限定义,集成旧的权限概念扩展native SQL扩展SQL建模和声明 ABAP ViewCDS View支持所有数据库是是支持查询…

MySQL - SQL聚合函数(查询操作 二)

聚合函数作用&#xff1a;将一列数据作为一个整体&#xff0c;进行纵向计算 。 常见聚合函数&#xff1a; 函数 功能 count 统计数量 max 最大值 min 最小值 avg 平均值 sum …