力扣刷题——1847. 最近的房间

news/2024/12/27 15:53:41/文章来源:https://www.cnblogs.com/yuhixyui/p/18635954

对每个询问,先找出符合实际房间体积,大于询问房间体积房间的房间号,之后再从这些符合条件的候选答案中挑选一个最接近询问房间ID号的。
为了找出符合条件的房间,可以对实际房间、询问房间,按照房间体积降序排序,然后只将大于等于询问房间体积的房间ID,加入到待筛选的房间列表中。因为对于小于询问房间体积的房间,是不会作为答案的。
同时保证待筛选的房间列表保存在一个有序的列表之中,这样就可以通过二分查找的方式,快速的找到最接近询问房间ID的房间ID,实现如下:

struct record
{int originId;int roomSize;int roomId;record(int _originId, int _roomSize, int _roomId){this->originId = _originId;this->roomSize = _roomSize;this->roomId = _roomId;}
};bool compare__(const record& a, const record& b)
{return a.roomSize > b.roomSize;
}class Solution {
public:vector<int> closestRoom(vector<vector<int>>& rooms, vector<vector<int>>& queries) {vector<record> roomRecords;vector<record> queryRecords;for(int i = 0; i < rooms.size(); i++){roomRecords.emplace_back(record(i, rooms[i][1], rooms[i][0]));}for(int i = 0; i < queries.size(); i++){queryRecords.emplace_back(record(i, queries[i][1], queries[i][0]));}sort(roomRecords.begin(), roomRecords.end(), compare__);sort(queryRecords.begin(), queryRecords.end(), compare__);vector<int> res(queries.size(), -1);set<int> curRoomIdSet;int j = 0;for(int i = 0; i < queryRecords.size(); i++){int curRoomID = queryRecords[i].roomId;int curRoomSize = queryRecords[i].roomSize;int curQueryID = queryRecords[i].originId;while(j < roomRecords.size() && roomRecords[j].roomSize >= curRoomSize){curRoomIdSet.insert(roomRecords[j].roomId);j++;}int dist = INT_MAX;auto it = curRoomIdSet.lower_bound(curRoomID);if(it != curRoomIdSet.begin()){auto p = prev(it);dist = curRoomID - *p;res[curQueryID] = *p;}if(it != curRoomIdSet.end() && *it - curRoomID < dist)res[curQueryID] = *it;}return res;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/859884.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙NEXT开发实战教程—小红书app

幽蓝君最近发现小红书是个好东西,一定要多逛今天就浅浅模仿一下小红书app,主要是底部tab栏和主页部分。首先看一下tabbar,由于中间有一个红色按钮的存在,所以这里我使用自定义导航栏来实现,自定义的实现逻辑是在本来app的上层叠加一层自定义tabbar,使用监听index的变化来…

Python数据结构之双向循环链表

1、循环双向链表特点通过当前结点直接获取上一结点 通过头结点的上一结点直接可以去找到尾结点 可以进行反向循环链表,即反转链表2、头结点 链表头: 在数据结构中,链表是一种常见的存储结构。链表的每个节点包含数据和指向下一个节点的指针。链表头是链表的第一个节点,它在…

CDS标准视图:功能位置 I_FunctionalLocation

视图名称:I_FunctionalLocation 视图类型:基础 视图代码:点击查看代码 @EndUserText.label: Functional Location @Analytics: { dataCategory: #DIMENSION } @VDM.viewType: #BASIC @AbapCatalog: { sqlViewName: IFUNCTLLOCATION, compiler.compareFilter, preserveKey } …

DNS 原理入门

DNS 原理入门 导读 DNS 是互联网核心协议之一。不管是上网浏览,还是编程开发,都需要了解一点它的知识。本文详细介绍DNS的原理,以及如何运用工具软件观察它的运作。我的目标是,读完此文后,你就能完全理解DNS。一、DNS 是什么? DNS (Domain Name System 的缩写)的作用非…

Pycharm 2024.3 安装详细教程与激活方法(附常见问题解决)

Pycharm概述 Pycharm是JetBrains公司推出的一款功能强大的Python集成开发环境(IDE),凭借其丰富的功能和工具集,极大地提升了开发者的编程效率和工作体验。温馨提示: 本文中的方法仅供学习交流使用,如果条件允许,请支持正版软件。删除旧版本 Pycharm 如果您的电脑中已经安…

算法网关视频分析网关小知识:如何对视频分析系统实施冗余设计以提高稳定性?

在城市交通管理中,视频分析系统扮演着至关重要的角色,它不仅需要实时监控和分析交通流量,还需要在各种复杂环境下保持稳定运行。为了确保视频分析系统在面对设备故障、网络中断、电源波动等不可预见情况时仍能保持高可用性,实施冗余设计成为了提高系统稳定性的关键策略。以…

敏捷销售的基础:协同工具如何助力车企升级

今年来,国家在汽车产业领域频频出台利好政策,从新能源汽车补贴延续到以旧换新购车补贴,这一系列措施为汽车企业创造了全新的市场机遇。然而,面对复杂的销售网络、多样的营销活动和庞大的数据管理需求,车企如何迅速响应政策、提升协作效率,成为当前的核心挑战。 政策推动下…

在北大的第一学期结课小记——2024.12.27

本来是想昨天下午写的,因第一学期之课程在26日上午第四节课便已然完结,但却因个人的懒惰拖到了今日,我实在是罪无可恕,愿不要在接下来的期末复习上延续此般习气在开学初,本学期的选课方案可谓充满了妥协与权衡:为防掉课线代放弃了xsq,计概放弃了yhf,物院思修强制选课撞…

工作坊报名|使用 TEN Framework 与 Azure,探索你的多模态交互新场景

活动背景 GPT-4o Realtime API 发布,语音 AI 正在进入一场新的爆发。AI 的实时语音和视觉互动能力将为我们带来更多全新创意和应用场景。实时音频交互:允许应用程序实时接收并响应语音和文本输入。 自然语音生成:减少 AI 语音的机械感,使对话更加人性化。 多语言能力:促进…

【2】UDS诊断的请求和响应

1. 常见的UDS服务 UDS共包含6大类,26个服务。其中常用的有:诊断和通信管理中的10(诊断会话控制)、11(ECU 复位)、27(安全访问)、3E(待机握手),数据传输功能中的22(通过ID读数据)、2E(通过ID写数据),存储数据传输功能的14(清除诊断信息)、19(读取故障码信息)…

学习破解一个Android程序

首先编写一个android测试程序 功能:校验用户名和注册码,成功则弹出注册成功提示 以下仅给出关键部分的代码 res/layout/activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.androi…

DP1363F是一款高度集成的非接触读写芯片,高性能、多协议NFC读卡IC

DP1363F是一款高度集成的非接触读写芯片,集强大的多协议支持、最高射频输出功率,以及突破性技术低功耗卡片检测等优势于一身,满足市场对更高集成度、更小外壳和互操作性的需求,适用于银行、电子政务、交通、移动支付等众多基础设施应用。 DP1363F支持下列操作模式: •读写模…