1184. 公交站间的距离(24.9.16)

题目

环形公交路线上有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. 1 <= n < 10^4
  2. distance.length = n
  3. 0 <= start, destination < n
  4. 0 <= distance[i] <= 10^4

解题思路

题目当中是一个环,走法只有两种,一种是顺时针走,一种是逆时针走
顺时针走:顺时针则是从start直接走到destination,只需要一次遍历,每走一步就++,加上对应值即可。
逆时针走
(1)对于逆时针而言,假设逆时针的起始点为i,由于本题当中逆时针的步数一定小于其圈的大小,与顺时针相反,我们每走一步就--,那么得出的答案就是与终点/起点的相对位置,我们只需要让其沿顺时针方向走一圈其实仍然在这个位置,对于小于0的位置而言我们将其转化为了对应的顺时针的下标,对于大于0的位置而言则是让它多走了一圈,我们需要使用%操作时期回到对应下标
(2)根据 (1)可以得到下方的式子(对应位置):(假设所在位置于 i,圈的大小为 n )
        对于i>0而言:(i+n)%n
        对于i<0而言:(i+n)
两个式子可以简化为:(i+n)%n,因为i<0转化为对应位置也为非负数,执行%n无任何影响
(3)对于逆时针的情况需要注意的是:其距离是前一个数字对应的值,因此我们任然需要在对应位置-1再次求对应位置
(4)优化:(2)(3)合并:((i-1)+n)%n

代码

优化前:

class Solution {
public:int distanceBetweenBusStops(vector<int>& distance, int start, int destination) {int n=distance.size();int shun=0,ni=0;//顺for(int i=start;i%n!=destination;i++){shun+=distance[i%n];}//逆for(int i=start;(n+i%n)%n!=destination;i--){int k=(n+i%n)%n;//将当前坐标转化为对应的坐标k=(n+(k-1)%n)%n;//转化为下一个坐标,求出对应长度ni+=distance[k];}return min(shun,ni);}
};

优化后:

class Solution {
public:int distanceBetweenBusStops(vector<int>& distance, int start, int destination) {int n=distance.size();int shun=0,ni=0;//顺for(int i=start;i%n!=destination;i++){shun+=distance[i%n];}//逆for(int i=start;(n+i)%n!=destination;i--){int k=(n+i-1)%n;//将当前坐标转化为对应的坐标ni+=distance[k];}return min(shun,ni);}
};

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

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

相关文章

数组学习内容

动态初始化 只给长度&#xff0c;数据类型【】 数组名new 数据类型【数组长度】 内存图

打造最佳自闭症患全寄宿学校:为孩子的未来保驾护航

在广州这座繁华而温暖的城市中&#xff0c;隐藏着一片专为自闭症儿童精心打造的避风港——星贝育园自闭症儿童寄宿制学校。这里&#xff0c;不仅是一所学校&#xff0c;更是无数家庭希望的灯塔&#xff0c;用爱与专业为孩子们铺设了一条通往更加独立自主生活的道路。 一、爱的…

泛读笔记:从Word2Vec到BERT

自然语言处理(NLP)模型的发展历史 1.统计方法时期&#xff1a;使用贝叶斯方法、隐马尔可夫模型、概率模型等传统统计方法 2.机器学习时期&#xff1a;支持向量机(SVM)、决策树模型、随机森林、朴素贝叶斯等传统机器学习方法 3.深度学习革命&#xff1a;各种新的深度学习模型&am…

卸载完mathtype后,删除word加载项中的mathtype

请参考博客“卸载完mathtype后&#xff0c;word加载项中还是有mathtype的解决方法_怎么删除word加载项里的mathtype-CSDN博客”以及 “安装卸载MathType经验解决MathType DLL找不到的问题——超实用_mathtype dll cannot-CSDN博客” 如果在删除.dotm文件时&#xff0c;删不掉…

01 企业成长助力计划

1,企业和军队一个共同点: 必须不断打胜仗,才能持续活下去并活的有力量。 2,从知道到做到,其实非常艰难 3,大道至简,知易行难 4,华为值得大家学习么,哪些值得学习,学习什么,怎么学。 5,企业发展的瓶颈 6,学习什么? 学习华为是怎么学习别人的。 学习华为是如何批…

TCP协议分析《实验报告》

一、实验目的 1、理解TCP协议&#xff1b; 2、掌握TCP协议三次握手建立连接和四次挥手释放连接的过程&#xff1b; 3、理解TELNET协议及工作过程&#xff1b; 4、掌握TCP协议分析方法。 二、实验设备和环境 1、硬件设备&#xff1a;PC机或笔记本电脑&#xff1b; 2、软件…

金融行业中如何利用数据中台的数据来有效的驱动业务决策呢?

前言​ 在金融行业中&#xff0c;利用数据中台的数据来有效驱动业务决策是一个复杂而关键的过程。其实我们的核心就是帮助金融机构最大化数据中台的价值&#xff0c;并推动业务决策的科学性和准确性。本文我从技术的角度来剖析一下这一过程。​ 什么是数据中台&#xff1f;​…

【C++】学完c语言后的c++基础知识补充!(命名空间、输入和输出、缺省函数、函数重载、引用、内联函数代替宏、nullptr代替NULL)

一. 命名空间 1. 定义 出现的意义&#xff1a;解决各种函数、关键词和类的名称冲突问题。 定义方式&#xff1a;namespace 命名空间的名字 { } &#xff08;注意&#xff01;}后面不加&#xff1b;&#xff09; namespace 是关键词命名空间的…

前端基础知识(HTML+CSS+JavaScript)

文章目录 一、HTML1.1 HTML 基础&#xff1a;1.1.1 HTML 的概念&#xff1a;1.1.2 认识 HTML 标签&#xff1a;1.1.3 HTML 文件基本结构&#xff1a;1.1.4 标签层次结构&#xff1a; 1.2 HTML 快速入门&#xff1a;1.3 HTML常见标签&#xff1a;1.3.1 标题标签&#xff1a;h1-h…

智能家政保洁|基于java和vue的智能家政保洁预约系统(源码+数据库+文档)

智能家政保洁预约系统 目录 基于java和vue的智能家政保洁预约系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#xf…

Android应用程序启动源码分析

文章目录 Android应用程序启动源码分析一、启动流程二、Launcher通知AndroidOS(用户点击图标)2.1 Activity.java2.2 Instrumentation.java2.3 ActivityTaskManagerService.java2.4 ActivityStarter.java2.5 RootWindowContainer.java2.5.1 Task.java2.5.2 TaskFragment.java 2.…

JS高级(二)、深入对象:构造函数;Object,Array,String,Number包装类;原型对象,原型链

文章目录 一、深入对象1. 构造函数2. 实例成员&静态成员(1)、实例成员(2)、静态成员 3. 包装类(1)、Object&#xff1a;keys&#xff0c;values(2)、Array&#xff1a;forEach&#xff0c;map&#xff0c;join&#xff0c;every&#xff0c;find&#xff0c;filter&#xf…

2024年【山东省安全员B证】报名考试及山东省安全员B证最新解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 山东省安全员B证报名考试是安全生产模拟考试一点通生成的&#xff0c;山东省安全员B证证模拟考试题库是根据山东省安全员B证最新版教材汇编出山东省安全员B证仿真模拟考试。2024年【山东省安全员B证】报名考试及山东省…

2024年【山东省安全员A证】最新解析及山东省安全员A证证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 山东省安全员A证最新解析根据新山东省安全员A证考试大纲要求&#xff0c;安全生产模拟考试一点通将山东省安全员A证模拟考试试题进行汇编&#xff0c;组成一套山东省安全员A证全真模拟考试试题&#xff0c;学员可通过…

英语学习交流平台|基于java的英语学习交流平台系统小程序(源码+数据库+文档)

英语学习交流平台系统小程序 目录 基于java的英语学习交流平台系统小程序 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&…

MutationObserver详解+案例——深入理解 JavaScript 中的 MutationObserver:原理与实战案例

目录 深入理解 JavaScript 中的 MutationObserver&#xff1a;原理与实战案例 一、MutationObserver 简介 二、MutationObserver 的工作原理 1、基本用法 2、observe 方法的配置项 三、实战案例 案例 1&#xff1a;监控动态内容加载 案例 2&#xff1a;监控属性变化 案…

【演化博弈论】:双方演化博弈的原理与过程

目录 一、演化博弈的原理1. 基本概念2. 参与者的策略3.演化过程 二、MATLAB 代码解读&#xff08;博弈参与主体&#xff08;双方&#xff09;策略选择的动态演化讨程&#xff09;三、MATLAB 代码解读&#xff08;博弈主体随着时间策略选择的动态演化讨程&#xff09;四、结论 演…

软考中级攻略站】-软件设计师(11)- 法律法规与标准化知识

知识产权 知识产权&#xff08;Intellectual Property Rights, IP&#xff09;是指法律赋予创造者或权利持有人对其创作成果享有的专有权利。这些创作成果可以是艺术作品、文学作品、发明创造、商标、工业设计等。知识产权的目的是鼓励创新和创造&#xff0c;保护创作者的合法…

【C++11】可变参数模板

【C11】可变参数模板 一、可变参数模板概念以及定义方式 ​ 在C11之前&#xff0c;类模板和函数模板只能含有固定数量的模板参数&#xff0c;c11增加了可变模板参数特性&#xff1a;允许模板定义中包含0到任意个模板参数。声明可变参数模板时&#xff0c;需要在typename或cla…

【课程学习】信号检测与估计II

b站 文章目录 1-概述 1-概述 线性、正交、平稳、高斯 研究线性模型&#xff0c;采用正交化方法&#xff0c;假设信号平稳&#xff0c;考虑信号的统计特性是高斯的。 本学期考虑&#xff0c;非线性、非正交、非平稳、非高斯。 阵列处理 1980-1990 MUSIC 稀疏性 2006-2012 LASS 时…