2026-11-07:电梯请求Ⅰ。用go语言,给定一个整数 n,代表楼房共有 n 层,楼层编号为 0 到 n-1。再给定一个数组 requests,表示按顺序出

🤖 AI总结

主题

力扣4020电梯请求问题的算法解析与多语言实现。

摘要

力扣电梯请求题要求计算按顺序处理楼层请求的总耗时,核心是累加相邻楼层差的绝对值,时间复杂度O(m)。

关键信息

  • 1 电梯按顺序处理楼层请求,总耗时为相邻请求楼层差的绝对值之和。
  • 2 时间复杂度O(m),空间复杂度O(1)。
  • 3 提供Go、Python、C++完整代码。

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)。

    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)
    }

    2026-11-07:电梯请求Ⅰ。用go语言,给定一个整数 n,代表楼房共有 n 层,楼层编号为 0 到 n-1。再给定一个数组 requests,表示按顺序出

    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()

    2026-11-07:电梯请求Ⅰ。用go语言,给定一个整数 n,代表楼房共有 n 层,楼层编号为 0 到 n-1。再给定一个数组 requests,表示按顺序出

    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;
    }

    2026-11-07:电梯请求Ⅰ。用go语言,给定一个整数 n,代表楼房共有 n 层,楼层编号为 0 到 n-1。再给定一个数组 requests,表示按顺序出

    芯谷ai:https://xinguhub.com/sign-up?aff=txk5

    我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

    © 版权声明

    相关文章