【刷题日记】1184. 公交站间的距离

简介: 好久不刷题,没有锻炼思维,感觉脑袋都要生锈了,刷题感觉还是要从简单题刷题才能慢慢找到感觉

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情

本次刷题日记的第 79 篇,力扣题为:1184. 公交站间的距离

一、题目描述:

好久不刷题,没有锻炼思维,感觉脑袋都要生锈了,刷题感觉还是要从简单题刷题才能慢慢找到感觉

就想面试一样,好久不面试,前几次面试大概率都是用来练手的

今天开始来刷一个简单的题,公交车之间的距离

image.png

二、这道题考察了什么思想?你的思路是什么?

看这个题 ,其实和我们平日里面的生活还是息息相关的,例如我们到市区里面坐公交车,如果是那种环形的公交车,我们在判断从正向走还是反向走的时候,可能生活中,我们是根据车站的个数来判断哪边近哪边远的

但是今天这个题更加的明确,题目给出 n 个公交车站,分别编号为 0 到 n-1,并且给出了一个数组,distance[i] ,表示从 i 车站,到 i+1%n 的车站距离

题目要求我们,找到 start 车站到 destination 车站最近的距离

分析

根据题中,我们可以知道,对于环形的车站,很明确,要么正向,要么反向,就目前来看就只有 2 条路,其实对于我们计算起来并不复杂

例如题目中给出的例子,有 4 个车站,分别是 0,1,2,3

车站编号 0 1 2 3
当前车站到下一个车站的距离 1 2 3 4

例如,我们需要找到 1 号车站到 3 号车站的距离,

image.png

正向:2+3 = 5

反向:1+4 = 5

这么看来,正向反向都可以

其实这么看来,我们在计算的时候,只需要计算 start 到 destination 的距离 num1, 和计算 destination 到 start 的距离 num2,最后取一个最小值即可

换句话说就是,start -> destination 中间经过的距离为 num1,destination -> start 中间经过的距离为 num2 ,咱们只需要遍历一次 distance 数组就可以得出结论了

三、编码

根据上述逻辑和分析,我们就可以翻译成如下代码,一起愉快编码吧

编码如下:

func distanceBetweenBusStops(distance []int, start int, destination int) int {
    // 咱们先确保 start 的值是一定小于 destination 的
    if start > destination {
        start, destination = destination, start
    }
    // 定义 2 个值,num1 表示正向的距离,num2 表示反向的距离
    var (
        num1    int
        num2    int
    )
    for i, des := range distance {
        if start <= i && i<destination {
            num1 += des
        }else{
            num2 += des
        }
    }
    return min(num1, num2)
}
func min(a, b int) int {
    if a < b {
        return a
    }
    return b
}

四、总结:

开篇的题用来练手,虽然简单,但是我们也可以去练习思考方式,以及做题的感觉

本题做法时间复杂度是 O(n) , 咱们遍历了一遍 distance 数组,空间复杂度是 O(1) ,我们引入的空间消耗属于常数级别的

image.png

原题地址:1184. 公交站间的距离

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

相关文章
|
7月前
|
容器
《剑指offer》——刷题日记
《剑指offer》——刷题日记
|
7月前
|
算法
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
52 3
|
7月前
蓝桥杯真题代码记录(直线
蓝桥杯真题代码记录(直线
52 0
|
算法 Cloud Native
【刷题日记】513. 找树左下角的值
本次刷题日记的第 74 篇,力扣题为:513. 找树左下角的值 ,中等
|
Cloud Native
【刷题日记】473. 火柴拼正方形
本次刷题日记的第 52 篇,力扣题为:473. 火柴拼正方形,中等
|
测试技术 索引 Cloud Native
【刷题日记】120. 三角形最小路径和
本次刷题日记的第 38 篇,力扣题为:120. 三角形最小路径和 ,中等
|
算法 测试技术 容器
代码随想录算法训练营第四十二天 | LeetCode 1049. 最后一块石头的重量 II、494. 目标和、474. 一和零
代码随想录算法训练营第四十二天 | LeetCode 1049. 最后一块石头的重量 II、494. 目标和、474. 一和零
49 1
|
索引 Cloud Native
【刷题日记】31. 下一个排列
【刷题日记】31. 下一个排列
|
Cloud Native
【刷题日记】1037. 有效的回旋镖
本次刷题日记的第 58 篇,力扣题为:1037. 有效的回旋镖,简单
【刷题日记】1037. 有效的回旋镖
|
Cloud Native
【刷题日记】17.11. 单词距离
本次刷题日记的第 48 篇,力扣题为:17.11. 单词距离 ,中等