(数组) LeetCode 1184. 公交站间的距离

news2024/11/16 3:38:40

原题链接

一. 题目描述

环形公交路线上有 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。

提示:

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

二. 解题思路

本题也是非常简单的一题,给定你一个环形的公交车行驶路径,其中第i个位置的值等于从i 位置到 i + 1 位置的距离,给定你一个start 开始位置和destination 结束位置,让你判断从开始位置到结束位置的最短距离,即需要顺时针还是逆时针行驶;

我刚开始想到的是使用前缀和的思想实现,但是发现这个题没必要,只需要简单的遍历即可,我们首先得判断起始位置和终止位置的大小关系,如果start  >  destination ,就需要将他们之间进行一次调换(目的是计算顺时针所走的路径长度),然后开始遍历数组,如果当前的i 大于或等于 start 并且小于 destination ,说明该路径是我们顺时针行走的必行路径,将其加入到一个ans 中即可,然后在外侧使用一个sum 统计走完一圈的路径长度。 

在结束循环之后我们只需要统计ans 和 sum - ans 的大小,选择最小的一个返回即可。

话不多说!!!上代码!!

三. 代码

class Solution {
public:
    int distanceBetweenBusStops(vector<int>& distance, int start, int destination) {
        int n = distance.size();
        int ans = 0;
        int sum = 0;
        if(start > destination){
            swap(start, destination);
        }
        for(int i = 0; i < n; i++){
            if(i >= start && i < destination){
                ans += distance[i];
            }
            sum += distance[i];
        }
        int res = min(ans, sum - ans);
        return res;
    }
};

四. 总结

时间复杂度:O(n);

空间复杂度:O(1)。

喜欢的话给个关注吧!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2151067.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决:The play() request was interrupted by a call to pause().报错

前言&#xff1a; 最近在公司中实现进入页面之后点击单词直接播放音频的时候&#xff0c;发现音频并不会播放声音&#xff0c;并且控制台报错&#xff1a; 研究之后找到了解决方案&#xff0c;与小伙伴们进行分享 原因&#xff1a; 首先看这句话的意思&#xff1a; 在调用 …

【C++】C++ STL探索:Priority Queue与仿函数的深入解析

C语法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现List使用及其模拟实现容器适配器Stack与Queue 这篇文…

中国数据中心服务器CPU行业发展概述

2024中国服务器CPU行业概览&#xff1a;信创带动服务器CPU国产化 AA体系是一种基于ARM指令系统和Android操作系统的体系结构&#xff0c;主要用于移动设备。与Wintel体系不同&#xff0c;AA体系中CPU厂商对芯片或系统厂商进行指令系统或IP核授权&#xff0c;操作系统厂商提供基…

Ansbile-变量

文章目录 一、Ansible的常量&#xff08;内置的变量&#xff09;有哪些&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1…

八、explicit关键字在C++中的用法

使用方法&#xff1a;修饰单参构造函数 作用&#xff1a;explicit修饰构造函数&#xff0c;禁止类型转换 使用Date d2 19&#xff1b; 这样的方式来进行d2对象的实例化。 在程序上是可以进行下去的&#xff0c;但不符合语法、也不合逻辑。 class Date { public:Date(int day)…

sqlite数据库设计工具

下载 开发环境 VS2022 + Qt5.14.2 CMake修改 add_subdirectory(sqlite3-cmake) include_directories(${CMAKE_SOURCE_DIR}/sqlite3-cmake/src) target_link_libraries(${PROJECT_NAME} sqlite3) 效果 参考 https://github.com/sqlitebrowser/sqlitebrowser

Java之封装

文章目录 1.封装1.1 什么是封装1.2 访问限定符1.3 包1.3.1 什么是包1.3.2 导包1.3.3 自定义包 2. static2.1 static 修饰成员变量2.2 static 修饰成员方法2.3 static成员变量初始化 3. 代码快3.1 普通代码块3.2 实例代码块3.3 静态代码块 4. 对象的打印 1.封装 1.1 什么是封装…

【JPCS出版】第四届电气工程与计算机技术国际学术会议(ICEECT 2024,9月27-29)

会议信息 会议官网&#xff1a;www.iceect.com 2024 4th International Conference on Electrical Engineering and Computer Technologywww.iceect.com 时间地点&#xff1a;2024年9月27日-29日 | 线上&#xff08;ZOOM&#xff09; 最终截稿时间&#xff1a;9月23日 主办…

【GVINS】

【GVINS】 1. GVINS的系统特点2. GVINS的融合导航存在问题3. GVINS的信号的组成4. GVINS的信号的组成 原理推导知乎 1. GVINS的系统特点 概述了一种名为GVINS的系统&#xff0c;它旨在解决视觉-惯性里程计&#xff08;VIO&#xff09;在长时间运行时出现的漂移问题。GVINS通过…

neo4j导入csv数据

neo4j数据可视化实践 手动输入数据 - 官方democsv数据导入准备数据数据处理导入步骤① 导入疾病表格② 导入药物表格③导入疾病-药物关系表格 爬虫的csv文件 手动输入数据 - 官方demo 点击之后&#xff0c;按照左边10张图中的代码&#xff0c;复制粘贴熟悉语法 效果如下 csv数据…

(undone) 学习语音学中关于 i-vector 和 x-vector

来源&#xff1a;https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber8461375 (这是一篇跟 X-vector 有关的论文) 这里有更适合初学者的两个资料: 1.https://www.youtube.com/watch?vR3rzN6JYm38 &#xff08;MIT教授的youtube视频&#xff09; 2.https://people.c…

JavaScript高级——组合继承

1、借用构造函数继承&#xff08;假的&#xff09; &#xff08;1&#xff09;套路&#xff1a; ① 定义父类型构造函数 ② 定义子类型构造函数 ③ 在子类型构造函数中调用父类型构造 &#xff08;2&#xff09;关键&#xff1a;在子类型构造函数中通用 call&#xff08;&…

VS2019配置C++版本的GDAL

VS2019配置GDAL教程 【特别注意】 vs2019编译好的GDAL库是可以在VS2022上面使用的&#xff0c;我这边做项目已经测试过没有问题&#xff0c;所以vs2022使用vs2019编译的gdal没有问题。 【编译版本介绍】 由于GDAL在vs2019源码流程有点复杂&#xff0c;因此我们在这不做讲解…

CSP-J2024年全真模拟题 阅读程序篇2

因为明天考试&#xff0c;这回给大家准备了超详细的解析~ 22.程序中 n 和 m 只有输入正整数&#xff0c;程序的输出值才可能是 YES A.对B.错 23.程序中用到了递归函数 bool fun&#xff08;int n&#xff09; A.对B.错 24.若输入 n 和 m 都是素数&#xff0c;程序的输出值…

vue MVC设计模式与MVVM设计模式

使用Vue框架开发前端项目,最大的优势就是再也不用进行复杂的DOM操作了,我们只要关心数据的变化即可,Vue框架会帮我们把复杂的DOM进行渲染,这背后都要归功于他的设计思想,即MVVM设计模式。 了解MVVM设计模式之前,有必要先了解一下MVC设计模式,MVVM模式是在MVC模式基础上…

【博弈论 斐波那契博弈】 HRPA

HRPA 这道题就是一个斐波那契博弈的经典模型&#xff1a; 有一堆个数为n的石子&#xff0c;第一个人第一次不能全部取完&#xff0c;每次一个人取石子的个数都应当大于0&#xff0c;且小于等于上一个人取的石子个数的两倍。 问是否有先手必胜策略。 如果有&#xff0c;第一个人…

分享一个通用OCR模型GOT-OCR2.0

通用OCR模型GOT-OCR2.0 在信息化快速发展的今天&#xff0c;光学字符识别&#xff08;OCR&#xff09;技术的应用越来越广泛。从文档数字化到自动化数据录入&#xff0c;OCR技术都发挥着重要作用。今天&#xff0c;我将为大家介绍一个开源的通用OCR模型——GOT-OCR2.0。 软件…

手把手教你-MAC虚拟环境搭建TensorFlow开发环境

参考如下代码布置&#xff0c;直接运行&#xff0c;即可: 1) 安装virtualenv $ sudo pip install virtualenv 2&#xff09;创建虚拟环境文件夹 $ virtualenv --system-site-packages -p python2.7 ./EnvPy27 3) 激活环境 $ source EnvPy27/bin/activate 4) 更新pip $ pi…

【动态规划】最大正方形

最大正方形&#xff08;难度&#xff1a;中等&#xff09; 该题对应力扣网址 思路 min_valuemin({dp[i-1][j-1],dp[i-1][j],dp[i][j-1]}) dp[i][j]min_value 关键点是正方形的右下角(n>1时)&#xff0c;通过画图&#xff0c;可以看出&#xff0c;在基础正方形22中&#x…

安卓13长按电源按键直接关机 andriod13不显示关机对话框直接关机

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 有些设备需要在长按电源键的时候,直接关机。不需要弹出对话框进行询问。 2.问题分析 过滤电源按键,需要在系统里面处理的话,那么我们需要熟悉android的事件分发,然后再…