解决leetcode第3934题最短唯一子数组

3934.最短唯一子数组

难度:困难

问题描述:

给你一个整数数组nums。

找出nums中与其他任何子数组均不相同的子数组的最小长度。返回一个整数,表示此类子数组的最小可能长度。

子数组是数组中的一个连续的非空元素序列。

如果两个子数组具有相同的长度,并且对应位置的元素也相同,则认为这两个子数组是相同的。

示例1:

输入:nums=3,3,3

输出:3

解释:

长度为1的子数组:3→出现3次

长度为2的子数组:3,3→出现2次

长度为3的子数组:3,3,3→出现1次

子数组3,3,3是唯一的,因此最小唯一子数组的长度为3。

示例2:

输入:nums=2,1,2,3,3

输出:1

解释:

长度为1的子数组:

2→出现2次

1→出现1次

3→出现2次

子数组1是唯一的,因此最小唯一子数组的长度为1。

示例3:

输入:nums=1,1,2,2,1

输出:2

解释:

长度为1的子数组:

1→出现3次

2→出现2次

长度为2的子数组:

1,1→出现1次

1,2→出现1次

2,2→出现1次

2,1→出现1次

至少有一个长度为2的子数组是唯一的,因此最小唯一子数组的长度为2。

提示:

1<=nums.length<=10**5

1<=numsi<=10**5

问题分析:

本问题首先要解决如何在一个整数数组nums中找出所有子数组的问题,函数get_all_sub_array(nums)实现了这一功能,其次是在这些子数组中找出只出现一次的子数组,这样就保证了这些找出的子数组具有唯一性,最后在这些具有唯一性的子数组中找出最短长度即为问题的解。

程序如下:

python 复制代码
#找出一个数组nums中所有的子数组并返回
def get_all_sub_array(nums):
    n=len(nums)
    a=[]
    for i in range(n):
        for j in range(i+1,n+1):
            b=nums[i:j]
            a.append(b)
    return a

#主程序
nums=eval(input('pls input nums='))
t=get_all_sub_array(nums)
b=[]
for i in t:
    if t.count(i)==1:
        b.append(i)
c=min(list(len(x) for x in b))
print(c)

运行实例一

pls input nums=1,2,3,3,4

1

运行实例二

pls input nums=1,2,1,2,2,3

1

运行实例三

pls input nums=2,3,2,3,2

3

相关推荐
Nil2082 分钟前
leetcode 300最长递增子序列
算法·leetcode·职场和发展
坊钰12 分钟前
【LangGraph框架入门级】2. 图核心概念:State、Node、Edge 与 Reducers
python·ai编程·langgraph
wewowilling13 分钟前
AI大模型开发--01Python基础(无废话)
开发语言·python·函数
小猴子爱上树15 分钟前
跨境电商AI图片翻译工具:批量图片翻译、视频字幕翻译与智能抠图一站式解决
大数据·人工智能·python·音视频
5G微创业18 分钟前
去除抖音视频水印的Python实现
python·微信小程序·去水印
WeiXin_DZbishe20 分钟前
基于微信小程序的本地闲置物品交易平台-计算机毕设 附源码【课程设计】26825
vue.js·spring boot·python·微信小程序·架构·php·课程设计
M--Y22 分钟前
LangChain 提示工程:少样本提示与输出解析器
python·langchain·大模型·llm·输出解析器·少样本提示
朱包林22 分钟前
iTerm2终端配置指南
linux·javascript·python·云原生·容器·kubernetes·云计算
棉猴24 分钟前
玩游戏学Python5-函数
开发语言·python·函数·玩游戏·游戏编程
Rain的Java大神之路25 分钟前
[特殊字符]8年Java老兵转型AI Agent:90%的人挂在同一个坑,根本不用学Python!(万字实战复盘,建议收藏)
java·数据库·人工智能·后端·python·spring·ai编程