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

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

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

一、题目描述:

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

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

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

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

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

但是今天这个题更加的明确,题目给出 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 号车站的距离,

正向: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) ,我们引入的空间消耗属于常数级别的

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

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

欢迎点赞,关注,收藏

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

好了,本次就到这里

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

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

猜你喜欢

转载自juejin.im/post/7125796590542913544