【刷题日记】17.11. 单词距离

简介: 本次刷题日记的第 48 篇,力扣题为:17.11. 单词距离 ,中等

本次刷题日记的第 48 篇,力扣题为:17.11. 单词距离中等

一、题目描述:

image.png

好久不见,今天我们来继续刷题,最近比较忙,发现人越忙,成长就越少,我认为是自我深度思考的时间变少了,自己和自己对话的时间变少了

继续刷题,锻炼思维

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

仔细分析一下这个题目给我们表达了什么信息呢:

  • 我们需要在给出的一堆单词中,找到某两个单词之间最近的距离
  • 给出的这俩单词在这一堆单词中还会重复多次,重复次数随机

那么我们知道,在人群中,两个人最近的距离是什么,相互挨着,或者说相邻的时候是不是就是最近的呢?

image.png

就想上面这一组单词一样,咱们要找到 anice 两个单词最近的距离,咱们就想办法找到这俩单词各种情况相邻的时候,最小的距离就可以了

那么,我这里就可以想到使用双指针的方式来处理这个题

还是上面这个图表达的内容

  • 咱们定义一个 p1 来表示 word1 默认当前位置,初始化的时候为 -1,定义一个 p2 来表示 word2 默认的当前位置
  • 遍历给出的 words ,当遍历到当前单词和 word1 一致时,则将该位置赋值给 p1
  • 同理,将 word2 当前位置赋值给 p2
  • 当校验到 p1 和 p2 都是大于等于的时候,则计算他们俩的差值,直到遍历 words 完毕,取所有差值的最小值即可

不过这里我们需要注意,初始化 p1 , p2 当前位置为 -1 这里不用过多解释,但是我们需要初始化一个数字是比较大的,可以指定为 words 的长度

这样的目的是,咱们逻辑清晰,且避免计算出错,保证第一次计算最小值比较的时候,得到的最小值一定是实际的值。

三、编码

根据上述逻辑和分析,我们就可以翻译成如下代码

编码如下:

func findClosest(words []string, word1 string, word2 string) int {
    var p1,p2 = -1,-1
    // 此处需要注意定义 res 的时候,可以大一点,可以为整个 words 的长度,这是为了避免咱们在计算两个单词最小值的时候,计算出错
    var res = len(words)
    for index,w := range words {
        if w == word1 {
            p1 = index
        }
        if w == word2 {
            p2 = index
        }
        if p1 >=0 && p2 >= 0{
            res = min(help(p1,p2) , res)
        }
    }
    return res
}
func help (a,b int) int {
    if a > b{
        return a-b
    }
    return b-a
}
func min (a,b int) int {
    if a > b {
        return b
    }
    return a
}

四、总结:

image.png

这里我们可以看到,这种双指针的实现方式,我们只遍历了一次 words 数组,则此处我们的时间复杂度是 O(n)

空间复杂度比较明确,我们引入的空间消耗为 O(1)

原题地址:面试题 17.11. 单词距离

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

欢迎点赞,关注,收藏

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

image.png

好了,本次就到这里

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

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



相关文章
|
Cloud Native
【刷题日记】1184. 公交站间的距离
好久不刷题,没有锻炼思维,感觉脑袋都要生锈了,刷题感觉还是要从简单题刷题才能慢慢找到感觉
|
Cloud Native
【刷题日记】30. 串联所有单词的子串
本次刷题日记的第 75篇,力扣题为:30. 串联所有单词的子串 ,困难
|
7月前
leetcode127单词接龙刷题打卡
leetcode127单词接龙刷题打卡
40 0
|
7月前
|
算法
刷题专栏(二十):单词规律
刷题专栏(二十):单词规律
66 0
|
存储 搜索推荐 Go
【刷题日记】692. 前K个高频单词
本次刷题日记的第 59 篇,力扣题为:692. 前K个高频单词,中等
|
机器学习/深度学习 索引 Cloud Native
【刷题日记】821. 字符的最短距离
本次刷题日记的第 41 篇,力扣题为:821. 字符的最短距离 ,简单
101 0
|
存储 自然语言处理 索引
【刷题日记】 最常见的单词
本次刷题日记的第 36 篇,力扣题为:最常见的单词 ,简单
|
Cloud Native
【刷题日记】64. 最小路径和
本次刷题日记的第 39 篇,力扣题为:64. 最小路径和 ,中等
150 0
|
存储 Cloud Native
【刷题日记】128. 最长连续序列
本次刷题日记的第 56 篇,力扣题为:128. 最长连续序列,中等
|
存储 索引 Cloud Native
【刷题日记】498. 对角线遍历
本次刷题日记的第 65 篇,力扣题为:498. 对角线遍历,中等