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

【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)

相关文章:

  • FFmpeg + ‌Qt‌ 简单视频播放器代码
  • 【算法笔记】图论基础(一):建图、存图、树和图的遍历、拓扑排序、最小生成树
  • 如何在 Bash 中不依赖 curl 或 wget 发出 HTTP 请求并实现文件传输——/dev/tcp的妙用
  • illustrate:一款蛋白/核酸结构快速渲染为“卡通风格”的小工具
  • Ciura序列
  • 弱网测试:全链路实战、高阶策略与自动化落地
  • 多线程14(哈希表与文件操作IO)
  • CPU架构和微架构
  • 中颖SH366000介绍和使用全解
  • Web安全策略CSP详解与实践
  • HTTP请求过程详解
  • 构建自定义MCP天气服务器:集成Claude for Desktop与实时天气数据
  • /2要求:定义一个方法,根据id查找对应的用户信息 //如果存在,返回id //如果不存在,返回-1
  • 蓝桥杯 小球反弹
  • 278.缀点成线
  • uniapp 和 webview 之间的通信
  • 【1】Java 零基础入门学习(小白专用)
  • 新配置了一台服务器+域名共178:整个安装步骤,恢复服务
  • Docker逃逸
  • 基于SSM框架的汽车租赁平台(源码+lw+部署文档+讲解),源码可白嫖!
  • 媒体:黑话烂梗包围小学生,“有话好好说”很难吗?
  • 习近平在上海考察
  • 美乌总统梵蒂冈会谈,外交部:望有关各方继续通过对话谈判解决危机
  • 第1现场|无军用物资!伊朗港口爆炸已遇难40人伤1200人
  • 夜读丨庭院春韵
  • 五一假期“热潮”来袭,计划南下的小伙伴注意了