【问题描述】 给定一个只包含自然数的列表nums。列表的度指的是任一元素出现频率的最大值。找出与nums 拥有相同大小的度的最短连续子列表。输出这个子列表的长度。 【输入形式】 一个列表,包括方括号,逗号分隔 【输出形式】 整数 【样例输入】 [1, 2, 2, 3, 1] 【样例输出】 2 【样例说明】 输入列表的度是2,因为元素1和2的出现频数最大,均为2。连续子列表里面拥有相同度的有如下所示: [1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2, 2, 3], [2, 2] 最短连续子数组[2, 2]的长度为2,输出2.
时间: 2023-06-11 13:04:31 浏览: 111
好的,根据你的要求,我理解了你的问题是要求给定一个只包含自然数的列表,找到与该列表拥有相同大小的度的最短连续子列表,并输出该子列表的长度。那么针对这个问题,我们可以按照以下思路进行解决:
1. 首先统计列表中每个元素的出现频次,并记录频次最大值;
2. 然后遍历列表,找到第一个出现频次等于最大频次的元素,在记录该元素的位置;
3. 接着从该位置开始向后遍历,直到遍历到最后一个出现频次等于最大频次的元素,记录该位置;
4. 最终子列表的长度即为记录的最后一个位置减去记录的第一个位置再加上1。
那么我现在就可以根据这个思路来写出相应的代码了,你看下面的代码是否符合你的要求:
```python
import collections
def findShortestSubArray(nums):
count = collections.Counter(nums) # 统计每个元素的出现频次
degree = max(count.values()) # 获取列表的度
first,last = {},{}
for i,num in enumerate(nums):
if num not in first: # 找到第一个出现频次等于度的元素
first[num] = i
last[num] = i # 记录每个出现频次等于度的元素的位置
res = len(nums) # 记录最短连续子列表的长度
for num in count:
if count[num] == degree: # 找出出现频次等于度的元素
res = min(res, last[num]-first[num]+1) # 更新最短连续子列表的长度
return res
nums = eval(input()) # 将输入的字符串转化为列表
print(findShortestSubArray(nums))
```
你可以试着输入一些样例,看看是否可以获得正确的结果,如果还有其他问题,可以继续问我。
阅读全文