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

news2024/9/20 11:07:29

题目

环形公交路线上有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.coloradmin.cn/o/2140495.html

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

相关文章

C++11(3)

目录 可变参数模版 获取参数包值的方式 1.递归方式展开参数包 2.使用数组逗号表达式展开 emplace_back函数 lambda表达式 C98中的例子 lambda表达式 语法 lambda表达式和函数比较 包装器 function包装器 bind绑定器 可变参数模版 C11 的新特性可变参数模板能够让您…

Java--String类

前言&#xff1a; 在之前的学习中&#xff0c;学习了和了解了一些类的基本使用&#xff0c;例如object类等等&#xff0c;但是我们用String这个引用或者说这个类其实我们已经用了好久&#xff0c;只不过没有具体分析过&#xff01; 对于String类&#xff0c;它可以引用一个字符…

VTD激光雷达(1)——01_OptiX_RayTracing-笔记

文章目录 前言一、文档介绍1、 总结 前言 不想学习怎么办 感谢VTD官方视频指导 一、文档介绍 1、 1 2 站在光的角度上考虑问题&#xff0c;如果用光源发出的&#xff0c;好多没到传感器上&#xff0c;这样会导致计算量很大&#xff0c;我们用传感器的trace 3 4 5 6 7 8 …

如何在 Vue 3 + Element Plus 项目中实现动态设置主题色以及深色模式切换

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言二、项目依赖和环境配置1. VueUse2. use-element-plus-theme3. 安装依赖 三、实现深色模式切换1. 设置深色模式状态2. 模板中的深色模式切换按钮3. 深色模式的效果展示 四、动态切换主题色五、总结 一、引言 在现代…

平安养老险阜阳中心支公司开展金融教育宣传专项活动

为全面深入开展“金融教育宣传月”的各项工作&#xff0c;不断完善金融惠民利民举措&#xff0c;提升金融服务质效&#xff0c;帮助基层群众增强维权意识、防非反诈的自我保护能力。近日&#xff0c;平安养老保险股份有限公司&#xff08;以下“平安养老险”&#xff09;阜阳中…

神经网络_使用tensorflow对fashion mnist衣服数据集分类

from tensorflow import keras import matplotlib.pyplot as plt1.数据预处理 1.1 下载数据集 fashion_mnist keras.datasets.fashion_mnist #下载 fashion mnist数据集 (train_images, train_labels),(test_images, test_labels) fashion_mnist.load_data()print("t…

食品包装识别系统源码分享

食品包装识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

IDEA复制代码到MD笔记格式还手动调,赶紧试试这个功能,一步到位

你是否曾经有过这种复制代码到笔记代码块的经历&#xff0c;选中后代码左侧有一些空格 然后粘到Markdown笔记里除第一行外&#xff0c;其他几行都要手动向前缩进&#xff0c;真是逼死强迫症啊 但是&#xff0c;其实idea工具中有一个“列选择模式”的功能&#xff0c;我们可以…

51单片机-LCD1602(液晶显示屏)- 写驱动

时间永远是检验真理唯一标准&#xff01;Whappy&#xff01; 主要简单写出几个驱动 初始化、显示字符、显示字符串、显示整形数据、有符号数据、十六进制、二进制&#xff01; void LCD_Init(); void LCD_ShowChar(unsigned char Line,unsigned char Column,char Char); vo…

【网络安全的神秘世界】csrf客户端请求伪造

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 一、概述 跨站请求伪造&#xff0c;是一种挟持用户在当前已登陆的web应用程序上执行非本意操作的攻击方法&#xff0c;允许攻…

Comsol 利用多孔材料填充复合吸声器,拓宽低频完美吸声

参考文献&#xff1a;Cheng B , Gao N , Huang Y ,et al.Broadening perfect sound absorption by composite absorber filled with porous material at low frequency:[J].Journal of Vibration and Control, 2022, 28(3-4):410-424.DOI:10.1177/1077546320980214. 为了提高低…

端侧大模型系列 | 斯坦福手机端侧Agent大模型,为Android API而生!

0. 引言 峰峦或再有飞来&#xff0c;坐山门老等。泉水已渐生暖意&#xff0c;放笑脸相迎 小伙伴们好&#xff0c;我是微信公众号《小窗幽记机器学习》的小编&#xff1a;卖铁观音的小男孩。今天这篇小作文主要介绍端侧大模型中的函数调用&#xff0c;即常说的Function calling…

即插即用!高德西交的PriorDrive:统一的矢量先验地图编码,辅助无图自动驾驶

Driving with Prior Maps: Unified Vector Prior Encoding for Autonomous Vehicle Mapping 论文主页&#xff1a;https://misstl.github.io/PriorDrive.github.io/ 论文链接&#xff1a;https://arxiv.org/pdf/2409.05352 代码链接&#xff1a;https://github.com/missTL/Pr…

【数据结构】排序算法---直接插入排序

文章目录 1. 定义2. 算法步骤3. 动图演示4. 性质5. 算法分析6. 代码实现C语言PythonJavaCGo 7. 折半插入排序代码实现——C 结语 1. 定义 直接插入排序是一种简单直观的排序算法。它的工作原理为将待排列元素划分为「已排序」和「未排序」两部分&#xff0c;每次从「未排序的」…

PHP Swoole实现简易聊天室,附加小程序端连接websocket简易代码

目录 用到的工具&#xff1a; PHP Swoole拓展 | PHP Redis拓展 | Redis 7 一、安装上述必要工具&#xff08;下面是以宝塔面板中操作为例&#xff09; 给PHP安装Swoole和Redis拓展&#xff1a; 安装Redis软件 二、创建websocket服务器文件"wss_server.php" 具…

node.js+Koa框架+MySQL实现注册登录

完整视频展示&#xff1a;https://item.taobao.com/item.htm?ftt&id831092436619&spma21dvs.23580594.0.0.52de2c1bg9gTfM 效果展示&#xff1a; 一、项目介绍 本项目是基于node.jsKoamysql的注册登录的项目,主要是给才学习node.js和Koa框架的萌新才写的。 二、项目…

java数据结构----图

图的存储结构: 代码实现 public class Graph {// 标记顶点数目private int V;// 标记边数目private int E;// 邻接表private Queue<Integer>[] adj;public Graph(int v) {V v;this.E 0;this.adj new Queue[v];for (int i 0; i < adj.length; i) {adj[i] new Queu…

C++的类与对象中(主讲默认成员函数)

目录 1.类的默认成员函数 2.构造函数 1.全缺省构造函数 2.第7点中的对自定义类型的成员变量构造&#xff08;调用编译器自动生成的默认构造函数&#xff09; 3.析构函数 4.拷贝构造函数 5.运算符重载 1.概念 2.赋值运算符重载 6.const成员函数 1.类的默认成员函数 默…

微服务——网关路由(Spring Cloud Gateway)

网关路由 1.什么是网关 网关又称网间连接器、协议转换器&#xff0c;是在网络层以上实现网络互连的复杂设备&#xff0c;主要用于两个高层协议不同的网络之间的互连。网关就是网络的关口。数据在网络间传输&#xff0c;从一个网络传输到另一网络时就需要经过网关来做数据的路由…

【深度智能】:迈向高级时代的人工智能全景指南

​ ​ 前几天偶然发现了一个超棒的人工智能学习网站&#xff0c;内容通俗易懂&#xff0c;讲解风趣幽默&#xff0c;简直让人欲罢不能。忍不住分享给大家&#xff0c;人工智能立刻跳转&#xff0c;开启你的AI学习之旅吧&#xff01; 第一阶段&#xff1a;基础知识 1. 计算机科…