2026-11-07:电梯请求Ⅰ。用go语言,给定一个整数 n,代表楼房共有 n 层,楼层编号为 0 到 n-1。再给定一个数组 requests,表示按顺序出现的楼层请求。电梯最初停在 0 层,每移动一层需要 1 秒。电梯必须按照 requests 的顺序逐个处理请求;如果电梯当前所在楼层与当前请求楼层相同,则无需移动,也不消耗时间;处理完当前请求后,电梯立即前往下一个请求楼层。请计算完成全部请求一共需要多少秒。
1 <= n <= 100。
1 <= requests.length <= 100。
0 <= requests[i] <= n - 1。
输入: n = 5, requests = [2,1,4,3]。
输出: 7。
解释:
requests[0] = 2:从 0 层移动到 2 层需要 2 秒。
requests[1] = 1:从 2 层移动到 1 层需要 1 秒。
requests[2] = 4:从 1 层移动到 4 层需要 3 秒。
requests[3] = 3:从 4 层移动到 3 层需要 1 秒。
所需的总时间是 2 + 1 + 3 + 1 = 7 秒。
题目来自力扣4020。
大体步骤如下:
1. 初始状态
电梯最初停在 0 层,所以当前楼层记为 0。
总耗时初始为 0。2. 处理第一个请求
requests[0] = 2
电梯从当前楼层 0 前往请求楼层 2。
移动距离为|2 - 0| = 2。
总耗时增加 2,总耗时变为 2。
处理完后,电梯当前楼层更新为 2。3. 处理第二个请求
requests[1] = 1
电梯从当前楼层 2 前往请求楼层 1。
移动距离为|1 - 2| = 1。
总耗时增加 1,总耗时变为2 + 1 = 3。
处理完后,电梯当前楼层更新为 1。4. 处理第三个请求
requests[2] = 4
电梯从当前楼层 1 前往请求楼层 4。
移动距离为|4 - 1| = 3。
总耗时增加 3,总耗时变为3 + 3 = 6。
处理完后,电梯当前楼层更新为 4。5. 处理第四个请求
requests[3] = 3
电梯从当前楼层 4 前往请求楼层 3。
移动距离为|3 - 4| = 1。
总耗时增加 1,总耗时变为6 + 1 = 7。
处理完后,电梯当前楼层更新为 3。6. 所有请求处理完毕
最终总耗时为 7 秒,因此输出结果为 7。
代码中的n表示楼层总数,但在这个计算过程中不需要使用它,因为题目保证所有请求楼层都是合法楼层,计算总耗时只需要依次计算相邻楼层之间的绝对差。
复杂度分析:
• 时间复杂度:需要遍历一次
requests数组,设请求数量为m,则时间复杂度为O(m)。由于本题中requests.length最大为 100,也可以说与请求数量线性相关。• 额外空间复杂度:计算过程中只使用了当前楼层、总耗时等少数变量,没有使用与输入规模相关的额外数据结构,因此额外空间复杂度为
O(1)。
package main
import (
"fmt"
)
func elevatorRequests(n int, requests []int) (ans int) {
pre := 0
for _, req := range requests {
ans += abs(req - pre)
pre = req
}
return
}
func abs(x int)int {
if x < 0 {
return -x
}
return x
}func main() {
n := 5
requests := []int{2, 1, 4, 3}
result := elevatorRequests(n, requests)
fmt.Println(result)
}
Python完整代码如下:
# -*-coding:utf-8-*-
def elevator_requests(n: int, requests: list[int]) -> int:
ans = 0
pre = 0
for req in requests:
ans += abs(req - pre)
pre = req
return ans
def main():
n = 5
requests = [2, 1, 4, 3]
result = elevator_requests(n, requests)
print(result)if __name__ == "__main__":
main()
C++完整代码如下:
// std::abs
int elevatorRequests(int n, const std::vector& requests) {
int ans = 0;
int pre = 0;
for (int req : requests) {
ans += std::abs(req - pre);
pre = req;
}
return ans;
}int main() {
int n = 5;
std::vector requests = {2, 1, 4, 3};
int result = elevatorRequests(n, requests);
std::cout << result << std::endl;
return0;
}
芯谷ai:https://xinguhub.com/sign-up?aff=txk5
我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。
热门跟贴