当前位置: 首页 > article >正文

【LeetCode】大厂面试算法真题回忆(36)--相同数字的积木游戏

题目描述

小华和小薇一起通过玩积木游戏学习数学。他们有很多积木,每个积木块上都有一个数字,积木块上的数字可能相同。

小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相同且所处位置最远的2块积木块,计算他们的距离。

小薇请你帮忙替她解决这个问题。

输入描述

第一行输入为N,表示小华排成一排的积木总数。

接下来N行每行是一个数字,表示小花排成一排的积木上数字。

其中,取值范围是0 <= 积木上的数字 < 10^9,1 <= 积木长度 <= 10^5

输出描述

相同数字的积木的位置最远距离;如果所有积木数字都不相同,请返回-1。

示例描述

示例一

输入:

5
1
2
3
1
4

输出:

3

示例二

输入:

2
1
2

输出:

-1

解题思路

  1. 创建索引字典,key为积木块上面的数字,value为积木的顺序位置。
  2. 初始化索引字典。
  3. 遍历索引字典中所有的key
    • 如果一个数字上有多个位置,计算最远的位置距离。
    • 获取最远距离。
  4. 返回最远距离,如果都不相同,则返回-1。

解题代码

from collections import defaultdict


def solve_method(nums):
    idx = defaultdict(list)

    for i in range(len(nums)):
        idx[nums[i]].append(i)

    ans = -1
    for k in idx.keys():
        if len(idx[k]) > 1:
            ans = max(ans, idx[k][-1] - idx[k][0])

    return ans


if __name__ == '__main__':
    assert solve_method([1, 2, 3, 1, 4]) == 3
    assert solve_method([1, 2]) == -1
```![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7583da5d4f0145f5a4bcf96db1b6e7b4.png#pic_center)


http://www.kler.cn/a/596067.html

相关文章:

  • MySQL超详细介绍(近2万字)
  • DeDeCMS靶场攻略
  • 使用 5W2H 分析法学习 C 语言理论知识
  • 小科普《DNS服务器》
  • 【Axure高保真原型】增删改饼图
  • Oracle OCP认证是否值得考?
  • unity urp 扭曲效果(半透明物体也可扭曲)
  • Unity—从入门到精通(第一天)
  • 一文了解ThreadLocal
  • bug:uni-file-picker上传图片报错,文件选择器对话框只能在由用户激活时显示,跨域cors
  • Ai客服机器人系统源码
  • redis搭建一主一从+keepalived(虚拟IP)实现高可用
  • 用 pytorch 从零开始创建大语言模型(零):汇总
  • 【css酷炫效果】纯CSS实现悬浮弹性按钮
  • CSS-文本属性1
  • C# HTTP 文件上传、下载服务器
  • v-自定义权限指令与v-if互相影响导致报错Cannot read properties of null (reading ‘insertBefore‘)
  • dcat-admin已完成项目部署注意事项
  • 4(四) Jmeter自动化报表html生成
  • 人工智能在电子信息工程信号处理中的应用调研