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. 1. 初始状态
    电梯最初停在 0 层,所以当前楼层记为 0。
    总耗时初始为 0。

  2. 2. 处理第一个请求requests[0] = 2
    电梯从当前楼层 0 前往请求楼层 2。
    移动距离为|2 - 0| = 2。
    总耗时增加 2,总耗时变为 2。
    处理完后,电梯当前楼层更新为 2。

  3. 3. 处理第二个请求requests[1] = 1
    电梯从当前楼层 2 前往请求楼层 1。
    移动距离为|1 - 2| = 1。
    总耗时增加 1,总耗时变为2 + 1 = 3。
    处理完后,电梯当前楼层更新为 1。

  4. 4. 处理第三个请求requests[2] = 4
    电梯从当前楼层 1 前往请求楼层 4。
    移动距离为|4 - 1| = 3。
    总耗时增加 3,总耗时变为3 + 3 = 6。
    处理完后,电梯当前楼层更新为 4。

  5. 5. 处理第四个请求requests[3] = 3
    电梯从当前楼层 4 前往请求楼层 3。
    移动距离为|3 - 4| = 1。
    总耗时增加 1,总耗时变为6 + 1 = 7。
    处理完后,电梯当前楼层更新为 3。

  6. 6. 所有请求处理完毕
    最终总耗时为 7 秒,因此输出结果为 7。

代码中的n表示楼层总数,但在这个计算过程中不需要使用它,因为题目保证所有请求楼层都是合法楼层,计算总耗时只需要依次计算相邻楼层之间的绝对差。

复杂度分析:

  • • 时间复杂度:需要遍历一次requests数组,设请求数量为m,则时间复杂度为O(m)。由于本题中requests.length最大为 100,也可以说与请求数量线性相关。

  • • 额外空间复杂度:计算过程中只使用了当前楼层、总耗时等少数变量,没有使用与输入规模相关的额外数据结构,因此额外空间复杂度为O(1)。

Go完整代码如下:

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助力您的未来发展。