力扣第11刷-公交站间的距离

简介: 力扣第11刷-公交站间的距离

Example 11

公交站间的距离

题目概述:环形公交路线上有n个站,按次序从0到n - 1进行编号。我们已知每一对相邻公交站之间的距离,distance[i]表示编号为i的车站和编号为(i + 1) % n的车站之间的距离。

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

返回乘客从出发点start到目的地destination之间的最短距离。

示例 1:

图片1.png

输入:distance = [1,2,3,4], start = 0, destination = 1

输出:1

解释:公交站 0 和 1 之间的距离是 1 或 9,最小值是 1。

示例 2:

图片2.png

输入:distance = [1,2,3,4], start = 0, destination = 2

输出:3

解释:公交站 0 和 2 之间的距离是 3 或 7,最小值是 3。

示例 3:

图片3.png

输入:distance = [1,2,3,4], start = 0, destination = 3

输出:4

解释:公交站 0 和 3 之间的距离是 6 或 4,最小值是 4。

解题思路:记数组distance 的长度为n。假设start≤destination,那么可以:

从start到destination,距离为

从start 到0,再从0到destination,距离为

答案为这两个距离的最小值。

解题步骤:

1. 因为在后续处理中涉及到循环问题,默认初始点总是小于终点,因此,首先判断初始点是否小于终点,若不小于,则将初始点与终点对调,以保证初始点总是小于终点,且最终结果不变。

2. 定义变量sum1和sum2,分别记录正行与逆行的距离,其初始值均为0。

3. 因整条路径是环形路段,因此正行路段与逆行路段之和为整条路径的和,则遍历整条路径,若某支分路径编号在[start,destination)之间,则其属于正行路段,将其加到sum1中,否则说明其属于逆行路段,将其加到sum2中。

4. 遍历结束后,将sum1与sum2的较小值返回,即为最短路径。

 

示例代码如下:

public class DistanceFromBusStop {
    /**
     * 环形公交路线上有n个站,按次序从0到n - 1进行编号。我们已知每一对相邻公交站之间的距离,distance[i]表示编号为i的车站和编号为(i + 1) % n的车站之间的距离。
     * 环线上的公交车都可以按顺时针和逆时针的方向行驶。
     * 返回乘客从出发点start到目的地destination之间的最短距离。
     * 示例 1:
     * 输入:distance = [1,2,3,4], start = 0, destination = 1
     * 输出:1
     * 解释:公交站 0 和 1 之间的距离是 1 或 9,最小值是 1。
     * 示例 2:
     * 输入:distance = [1,2,3,4], start = 0, destination = 2
     * 输出:3
     * 解释:公交站 0 和 2 之间的距离是 3 或 7,最小值是 3。
     * 示例 3:
     * 输入:distance = [1,2,3,4], start = 0, destination = 3
     * 输出:4
     * 解释:公交站 0 和 3 之间的距离是 6 或 4,最小值是 4。
     * 来源:力扣(LeetCode)
     * 链接:https://leetcode.cn/problems/distance-between-bus-stops
     */
    public static void main(String[] args) {
        DistanceFromBusStop dfbs = new DistanceFromBusStop();
        System.out.println(dfbs.distanceBetweenBusStops(new int[]{7, 10, 1, 12, 11, 14, 5, 0}, 7, 2));
    }
    /**
     * 个人
     * @param distance
     * @param start
     * @param destination
     * @return
     */
    /*public int distanceBetweenBusStops(int[] distance, int start, int destination) {
        int n = distance.length;
        int totalLength = 0;
        for (int i : distance) {
            totalLength += i;
        }
        int distanceOne = 0;
        int begin = Math.min(start, destination);
        int end = Math.max(start, destination);
        for (int i = begin; i < end; i++) {
            distanceOne += distance[i];
        }
        return Math.min(distanceOne, totalLength -distanceOne);
    }*/
    /**
     * 官方
     *
     * @param distance
     * @param start
     * @param destination
     * @return
     */
    public int distanceBetweenBusStops(int[] distance, int start, int destination) {
        if (start > destination) {
            int temp = start;
            start = destination;
            destination = temp;
        }
        int sum1 = 0, sum2 = 0;
        for (int i = 0; i < distance.length; i++) {
            if (i >= start && i < destination) {
                sum1 += distance[i];
            } else {
                sum2 += distance[i];
            }
        }
        return Math.min(sum1, sum2);
    }
}
相关文章
|
网络协议 API C#
C# 中模拟 POST 和 GET 请求的原理与实践
【1月更文挑战第4天】在现代网络应用中,HTTP请求是客户端与服务器交互的基础。其中,GET和POST是最常用的两种请求方法。本文将介绍如何使用C#语言模拟这两种请求,并解释其背后的工作原理。我们将利用.NET框架中的HttpClient类来发送请求,并处理服务器的响应。通过本文,读者将能够理解HTTP请求的基本构成,学会在C#中编写代码来模拟这些请求,进而在开发过程中实现与Web服务的交互。
|
Oracle 关系型数据库 Linux
Virtualbox上安装Linux系统(CentOS7)(图文超详细)
Virtualbox上安装Linux系统(CentOS7)(图文超详细)
4863 1
|
机器学习/深度学习 计算机视觉
YOLOv5改进 | 2023 | InnerIoU、InnerSIoU、InnerWIoU、FocusIoU等损失函数
YOLOv5改进 | 2023 | InnerIoU、InnerSIoU、InnerWIoU、FocusIoU等损失函数
687 0
|
分布式计算 大数据 数据处理
Spark RDD(弹性分布式数据集)
Spark RDD(弹性分布式数据集)
|
机器学习/深度学习 数据采集 监控
经典神经网络论文超详细解读(六)——DenseNet学习笔记(翻译+精读+代码复现)
经典神经网络论文超详细解读(六)——DenseNet学习笔记(翻译+精读+代码复现)
5606 1
经典神经网络论文超详细解读(六)——DenseNet学习笔记(翻译+精读+代码复现)
|
算法
秒懂算法 | 活动安排问题贪心算法
通过例子分析求解活动安排问题的最好贪心策略、展示按照贪心策略求解该问题的过程。
821 0
秒懂算法 | 活动安排问题贪心算法
|
存储 人工智能 自然语言处理
OpenAI如何让ChatGPT遵守了伦理道德的底线
OpenAI如何让ChatGPT遵守了伦理道德的底线
16864 0
|
缓存 JavaScript 前端开发
Vue模板语法(上)
Vue模板语法(上)
115 0
|
人工智能 图形学
Unity Rain Ai 插件的使用入门(一)
Unity Rain Ai 插件的使用入门
717 1
Unity Rain Ai 插件的使用入门(一)
|
弹性计算 对象存储 CDN
阿里云服务器带宽计费方式怎么选?
2023阿里云服务器带宽计费方式选择方法,阿里云服务器公网带宽计费模式按固定带宽和按使用流量哪个划算?阿里云百科以北京地域为例,按固定带宽计费1M带宽一个月23元,按使用流量计费1GB流量0.8元,如果云服务器带宽使用率低于10%,那么首选按使用流量计费,如果带宽实际利用率较高的话,按固定带宽计费更划算一些
416 0
阿里云服务器带宽计费方式怎么选?