首页 > 其他分享 >力扣刷题——1847. 最近的房间

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

时间:2024-12-27 15:52:33浏览次数:3  
标签:int roomRecords 房间 1847 力扣 vector roomSize queryRecords 刷题

对每个询问,先找出符合实际房间体积,大于询问房间体积房间的房间号,之后再从这些符合条件的候选答案中挑选一个最接近询问房间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;
    }
};

标签:int,roomRecords,房间,1847,力扣,vector,roomSize,queryRecords,刷题
From: https://www.cnblogs.com/yuhixyui/p/18635954

相关文章

  • 《老程序员的快乐刷题时代》题一:找单独的数
    一、写在开头哈喽,兄弟们!最近Build哥不是在搞那个年度人气创作者嘛(随便搞搞,嘿嘿,好心人给投下票呗),然后有个活动是刷算法题可以获得额外投票机会,于是乎,每天早上开工前的20分钟,俺就开始整上算法了,遥想上一次正儿八经的刷这种题还要追溯到五六年前,但是!现在又回首再刷,突然找到了年少轻......
  • 力扣第四十二题 接雨水(困难难度,c语言附着解析)
    代码如下这个代码是双指针算法,我参考了别人的解法,大致的思路如下,我们先使用两个指针,分别从数组开始和末尾开始遍历,并且我们使用了两个变量,分别记录当前我们遍历到的左边和右边遇到的最大高度。这里为什么要进行height[l]小于或大于的判断再进行相加,根据木桶效应,我们需要......
  • 力扣刷题——855. 考场就座
    题目要求进入考场的学生必须是离别人最远的,那么可以想到用一个最大堆维护区间长度,这样每次插入都只需要在堆头部插入新区间即可。要注意,当区间的一端不在首尾时,区间长度除以2是新加入的学生距离两边的距离;而区间有一端在首尾时,为了方便计算,令左端点为-1,右端点为N,这样,区间长度就等......
  • 算法刷题_链表篇
    算法刷题Day8_链表相交文章目录算法刷题Day8_链表相交@[TOC](文章目录)前言一、求出两个链表的长度和差值二、让其中较长一个链表移动到和第二链表对齐的位置三、其他解法_双指针法:总结前言简单来说,就是求两个链表交点节点的指针。一、求出两个链表的长度和差值......
  • leetcode刷题
    思路分析对于每一个房间,只有选或不选两种结果,假设第i个房间选了那么第i-1个房间就不能选。构建状态转移方程dp[i]=max(dp[i-1],dp[i-2]+nums[i]).意思是当偷到第i个房间时,最大的结果应该在偷不偷上一个房间(dp[i-2]+nums[i]也就是偷第i-2个房间和第i个房间的金额)偷上一个房......
  • 1225. 报告系统状态的连续日期 - 力扣(LeetCode)
    目录1.力扣链接2.题目3.分析4.代码实现5.代码验证6.总结1.力扣链接1225.报告系统状态的连续日期-力扣(LeetCode)2.题目表:Failed+--------------+---------+|ColumnName|Type|+--------------+---------+|fail_date|date|+-----......
  • 力扣238. 除自身以外数组的乘积
    给你一个整数数组 nums,返回数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32位 整数范围内。请 不要使用除法,且在 O(n) 时间复杂度内完成此题。......
  • 算法刷题Day7_翻转链表
    算法刷题Day7_单链表相关操作文章目录算法刷题Day7_单链表相关操作前言一、反转链表二、两两交换链表中的节点1.递归法2.迭代法总结前言提示:以下是本篇文章正文内容,下面案例可供参考一、反转链表classSolution{public:ListNode*reverseList(ListNode......
  • 算法刷题_删除链表的倒数第N个结点
    算法刷题Day8_删除链表的倒数第N个结点文章目录算法刷题Day8_删除链表的倒数第N个结点前言一、双指针思想二、具体步骤1.定义快慢指针2.fast指针先移动n+1步3.fast和slow一起移动4.删除倒数第N个节点三、完整代码总结前言一、双指针思想双指针的经典应用,如果......
  • 7-13刷题
    7.13刷题[NewStarCTF公开赛赛道]UnserializeOne<?phperror_reporting(0);highlight_file(__FILE__);#Somethingusefulforyou:https://zhuanlan.zhihu.com/p/377676274classStart{public$name;protected$func;publicfunction__destruct()#12当一......