AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

K0061. 魔法租房系统

中等通过率 65% · 提交 52 · 通过 34
模拟排序哈希表

小慕正在开发一个“智能租房匹配系统”,帮助用户在海量房源中快速找到符合需求的住所。系统支持以下核心操作: 任务: 1. addRoom(id, area, price, rooms, address):添加一套编号为 `id`,面积为 `area`,月租金为 `price`,卧室数量为 `rooms`,地址为 `address`(假设格式为 `[横坐标 x, 纵坐标 y]`,即地址数组长度为2) 的房源。如果系统中不存在编号为 `id` 的房源,则添加该房源并返回 `true`;如果已存在该房源,则更新对应的房源信息并返回 `false`。 2. deleteRoom(id):删除编号为 `id` 的房源。如果存在编号为 `id` 的房源,则删除该房源并返回 `true`;如果不存在该房源,则返回 `false`。 3. queryRoom(area, price, rooms, address, orderBy):查询符合以下筛选条件的房源,并根据 `orderBy` 的排序要求返回房源编号的序列: - 筛选条件: - 面积大于等于 `area`。 - 月租金小于等于 `price`。 - 卧室数量为 `rooms`。 - 排序要求:按 `orderBy` 中的排序条件依次进行排序。 - `orderBy` 是一个,每个元素是 `[parameter, order]`,表示对某个参数的排序方式: - `parameter` 表示排序的条件: - `1`:面积 (`area`) - `2`:月租金 (`price`) - `3`:地址的 (`address`) - `order` 表示排序的顺序: - `1`: - `-1`:降序 - 如果按照排序条件仍然相同,则按房源编号升序排列。

提示:带虚线的词点一下有通俗解释。

输入描述

- 第一行:一个整数 `Q`,表示总共的查询次数。 - 后续的 `Q` 行,每行一个命令 `cmd` 和若干参数: - **`RentingSystem`**:初始化租房系统。 - **`addRoom`**:添加房源,输入房源的详细信息: - 一个整数 `id`:房源编号。 - 一个整数 `area`:房源面积。 - 一个整数 `price`:房源月租金。 - 一个整数 `rooms`:房源卧室数量。 - 一个数组 `address`:房源坐标,输入地址数组。 - **`deleteRoom`**:删除房源,输入房源的 `id`。 - **`queryRoom`**:查询符合条件的房源,输入: - 一个整数 `area`:房源最小面积。 - 一个整数 `price`:房源最大月租金。 - 一个整数 `rooms`:房源卧室数量。 - 一个数组 `address`:查询地址,输入查询地址坐标数组。 - 一个二维数组 `orderBy`:查询结果排序条件,输入数组的长度,每个元素是 `[parameter, order]`,表示按哪个参数排序,排序方式是升序(1)或降序(-1)。

输出描述

- 对于每个操作,输出相应的结果: - **`RentingSystem`**:初始化操作,不返回参数,输出`null`。 - **`addRoom`**:若房源成功添加,返回 `true`;若房源信息被更新,返回 `false`。 - **`deleteRoom`**:若房源成功删除,返回 `true`;若房源不存在,返回 `false`。 - **`queryRoom`**:返回符合条件的房源编号列表,按照 `orderBy` 中的排序条件排序,若排序条件相同,则按房源编号升序排列。如果没有符合条件的房源,返回一个-1的列表。

示例

示例 1

输入

5
RentingSystem
addRoom
3
24
200
2
0 1
addRoom
1
10
400
2
1 0
queryRoom
1
400
2
1 1
2
3 1
2 -1
deleteRoom
3

输出

null
True
True
1 3
True

说明:1. **`RentingSystem`**:初始化租房系统。 2. **`addRoom`** 第一次:房源信息 ID=3,面积=24,价格=200,卧室数=2,地址=[0,1],成功添加返回 `true`。 3. **`addRoom`** 第二次:房源信息 ID=1,面积=10,价格=400,卧室数=2,地址=[1,0],成功添加返回 `true`。 4. **`queryRoom`**:查询条件:面积≥1,价格≤400,卧室数=2,地址=[1,1],排序条件:`3 1`(按曼哈顿距离升序),`2 -1`(按月租金降序),返回 `[1, 3]`。 5. **`deleteRoom`**:删除房源 ID=3,成功删除返回 `true`。

示例 2

输入

10
RentingSystem
deleteRoom
3
addRoom
3
24
200
2
0 1
addRoom
1
10
400
2
1 0
addRoom
2
20
300
3
2 2
addRoom
4
30
500
1
1 1
addRoom
5
35
700
2
3 3
addRoom
6
40
800
1
4 4
queryRoom
1
500
2
2 2
2
1 1
2 -1
queryRoom
3
100
2
2 2
2
3 1
2 1

输出

null
False
True
True
True
True
True
True
1 3
-1

说明:1. **`RentingSystem`**:初始化租房系统。 2. **`deleteRoom`**:删除房源 ID=3,返回 `false`(房源不存在)。 3. **`addRoom`**:分别添加 6 个房源,每个房源的 ID、面积、月租金、卧室数和地址信息。 4. **`queryRoom`** 第一次:查询条件:面积≥1,月租金≤500,卧室数=2,地址=[2, 2],排序条件:`1 1`(按面积升序)、`2 -1`(按价格降序),返回 `[1, 3, 2]`。 5. **`queryRoom`** 第二次:查询条件:面积≥3,月租金≤100,卧室数=2,地址=[2, 2],排序条件:`3 1`(按曼哈顿距离升序)、`2 1`(按价格升序),返回 `-1`(没有符合条件的房源)。

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
魔法租房系统 - 查询排序示例 1 (10,400,2) 地址[1,0] 3 (24,200,2) 地址[0,1] Q 查询点 [1,1] 曼哈顿距离=1 曼哈顿距离=1 排序规则:先按曼哈顿距离升序,再按月租金降序 结果:先输出 1(距离1,租金400),再输出 3(距离1,租金200)
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「魔法租房系统」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。