当前位置: 首页 > article >正文

【每日一题】LeetCode 1184.公交站间的距离问题(数组)

【每日一题】LeetCode 1184.公交站间的距离问题

题目描述

在环形公交路线上有 n 个站,这些站点按照顺序从 0n - 1 进行编号。我们已知每一对相邻公交站之间的距离,distance[i] 表示编号为 i 的车站和编号为 (i + 1) % n 的车站之间的距离。

环线上的公交车都可以按顺时针和逆时针的方向行驶。

现在需要计算从出发点 start 到目的地 destination 之间的最短距离。

思路分析

为了找到从 startdestination 的最短距离,我们可以采取以下步骤:

  1. 顺序遍历:从 start 出发,按照顺时针方向遍历直到到达 destination,累加经过的距离,得到一个总距离 sumorder
  2. 逆序遍历:同样从 start 出发,但这次按照逆时针方向遍历直到到达 destination,累加经过的距离,得到另一个总距离 sumbackward
  3. 比较两个方向的距离:比较 sumordersumbackward,返回两者中的较小值,即为最短距离。

输入示例

示例 1:

img

输入:distance = [1,2,3,4], start = 0, destination = 1
输出:1
解释:公交站 0 和 1 之间的距离是 1 或 9,最小值是 1。

示例 2:

img

输入:distance = [1,2,3,4], start = 0, destination = 2
输出:3
解释:公交站 0 和 2 之间的距离是 3 或 7,最小值是 3。

示例 3:

img

输入:distance = [1,2,3,4], start = 0, destination = 3
输出:4
解释:公交站 0 和 3 之间的距离是 6 或 4,最小值是 4。

提示:

  • 1 <= n <= 10^4
  • distance.length == n
  • 0 <= start, destination < n
  • 0 <= distance[i] <= 10^4

代码实现

class Solution {
    public int distanceBetweenBusStops(int[] distance, int start, int destination) {
        int sumorder = 0; // 顺序方向的总距离
        int sumbackward = 0; // 逆序方向的总距离
        int i = start; // 顺序方向的当前索引
        int j = start; // 逆序方向的当前索引

        // 顺序遍历,从 start 到 destination
        while (i != destination) {
            sumorder += distance[i];
            if (++i == distance.length) {
                i = 0; // 环形路线,从末尾回到开头
            }
        }

        // 逆序遍历,从 start 到 destination
        while (j != destination) {
            if (--j < 0) {
                j = distance.length - 1; // 环形路线,从开头回到末尾
            }
            sumbackward += distance[j];
        }

        // 返回两个方向中较小的总距离
        return Math.min(sumbackward, sumorder);
    }
}
 }

        // 返回两个方向中较小的总距离
        return Math.min(sumbackward, sumorder);
    }
}

http://www.kler.cn/news/309224.html

相关文章:

  • 【大模型技术教程】FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统
  • C语言习题~day32
  • 密码学---easy_hash
  • 论文阅读: SigLit | SigLip |Sigmoid Loss for Language Image Pre-Training
  • 【Kubernetes】常见面试题汇总(二十一)
  • 51单片机 - DS18B20实验1-读取温度
  • 硬件工程师笔试面试——变压器
  • 二.Oracle每周运维操作
  • 在Android中如何进行多渠道打包
  • Linux基础---07文件传输及解决yum安装失效的方法
  • 【Linux】探索文件I/O奥秘,解锁软硬链接与生成动静态库知识
  • 编译成功!QT/6.7.2/Creator编译Windows64 MySQL驱动(MinGW版)
  • 剧本杀小程序开发,探索互联网剧本杀游戏体验
  • 【C++】虚函数
  • 多速率信号处理-CIC滤波器
  • Go第三方框架--gin框架(三)
  • SpringBoot 消息队列RabbitMQ死信交换机
  • 2025年最新大数据毕业设计选题-基于Spark分析相关
  • NC反弹shell
  • 微服务中间件之Nacos
  • Android 系统开发人员的权限说明文档
  • 解锁全球机遇:澳大利亚服务器租用市场的独特魅力
  • [C#学习笔记]Newtonsoft.Json
  • 中秋节特别游戏:给玉兔投喂月饼
  • MinIO - macOS上配置、Python调用
  • Delphi Web和Web服务开发目前有哪些选择
  • ASP.NET Core 中的 CRUD 操作
  • 游戏录屏不清楚怎么办?这些录屏技巧让画质飙升!
  • 标准的高防服务器是什么样的呢?
  • VSCode扩展连接虚拟机MySQL数据库