LeetCode 1847. 最近的房间(排序离线计算 + 二分查找)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1847. 最近的房间(排序离线计算 + 二分查找)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
一個酒店里有 n 個房間,這些房間用二維整數數組 rooms 表示,其中 rooms[i] = [roomIdi, sizei] 表示有一個房間號為 roomIdi 的房間且它的面積為 sizei 。每一個房間號 roomIdi 保證是 獨一無二 的。
同時給你 k 個查詢,用二維數組 queries 表示,其中 queries[j] = [preferredj, minSizej] 。第 j 個查詢的答案是滿足如下條件的房間 id :
- 房間的面積 至少 為 minSizej ,且
abs(id - preferredj) 的值 最小 ,其中 abs(x) 是 x 的絕對值。 - 如果差的絕對值有 相等 的,選擇 最小 的 id 。如果 沒有滿足條件的房間 ,答案為 -1 。
請你返回長度為 k 的數組 answer ,其中 answer[j] 為第 j 個查詢的結果。
示例 1: 輸入:rooms = [[2,2],[1,2],[3,2]], queries = [[3,1],[3,3],[5,2]] 輸出:[3,-1,3] 解釋:查詢的答案如下: 查詢 [3,1] :房間 3 的面積為 2 ,大于等于 1 ,且號碼是最接近 3 的,為 abs(3 - 3) = 0 ,所以答案為 3 。 查詢 [3,3] :沒有房間的面積至少為 3 ,所以答案為 -1 。 查詢 [5,2] :房間 3 的面積為 2 ,大于等于 2 ,且號碼是最接近 5 的,為 abs(3 - 5) = 2 ,所以答案為 3 。示例 2: 輸入:rooms = [[1,4],[2,3],[3,5],[4,1],[5,2]], queries = [[2,3],[2,4],[2,5]] 輸出:[2,1,3] 解釋:查詢的答案如下: 查詢 [2,3] :房間 2 的面積為 3 ,大于等于 3 ,且號碼是最接近的,為 abs(2 - 2) = 0 ,所以答案為 2 。 查詢 [2,4] :房間 1 和 3 的面積都至少為 4 ,答案為 1 因為它房間編號更小。 查詢 [2,5] :房間 3 是唯一面積大于等于 5 的,所以答案為 3 。提示: n == rooms.length 1 <= n <= 10^5 k == queries.length 1 <= k <= 10^4 1 <= roomIdi, preferredj <= 10^7 1 <= sizei, minSizej <= 10^7來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/closest-room
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
類似題目:
LeetCode 1851. 包含每個查詢的最小區間(排序 + 離線查詢 + 優先隊列)
- 先對所有的 rooms 排序,尺寸大的先, 查詢 q 也是,尺寸大的先查(后續的查詢中,之前的房間尺寸都是滿足要求的)
- 然后依次查詢,將滿足尺寸的房間 id 插入 set,進行 二分查找,找到最接近的 id
608 ms 146.7 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 1847. 最近的房间(排序离线计算 + 二分查找)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1905. 统计子岛屿
- 下一篇: LeetCode 1870. 准时到达的