akcw 发表于 2021-4-18 19:46:21

怎么求相同度的最短连续子列表<新人求助>

【问题描述】

给定一个只包含自然数的列表nums。列表的度指的是任一元素出现频率的最大值。找出与nums 拥有相同大小的度的最短连续子列表。输出这个子列表的长度。

【输入形式】

一个列表,包括方括号,逗号分隔
【输出形式】

整数
【样例输入】



【样例输出】

2
【样例说明】

输入列表的度是2,因为元素1和2的出现频数最大,均为2。连续子列表里面拥有相同度的有如下所示:

, , , , ,

最短连续子数组的长度为2,输出2.

我只能求出度,不能确定这个度的最短连续子列表

阿奇_o 发表于 2021-4-18 22:56:32

按照“样例说明”,那不就等价于 就是求 出现次数最多的元素 的频数?
—— 这个“度”的 最短连续子列表,
若元素 1,有 2度(出现两次且为最大频数),那 最短连续子列表,不就是 吗?这长度为 2;
若元素 1,有 3度,那 最短连续子列表, 不就是 吗? 这长度为 3;
……

这样理解是否正确?—— 若正确,那这题目是不是有点太绕了。。

题目是要求 必须把中间所谓的“子列表”,都打印出来?

qq1151985918 发表于 2021-4-19 02:34:40

本帖最后由 qq1151985918 于 2021-4-19 02:46 编辑

##nums =
##nums =
##nums =
##nums =
##nums =
##nums =
##nums =
nums = eval(input("请输入数组:"))
countsons =
maxnums = max(countsons)
maxson =

if maxnums == 1:
    print(1,"-->",*[ for i in nums])
else:
    data = []
    for i in maxson:
      a,b = 0,-1
      while True:
            if nums == i:
                break
            else:
                a += 1
      while True:
            if nums == i:
                break
            else:
                b -= 1
      if b == -1:
            data.append(nums)
      else:
            data.append(nums)
            
    lenlists =
    mindata = min(lenlists)
    minlist =
    print(mindata,"-->",*minlist)

akcw 发表于 2021-4-22 13:25:27

本帖最后由 akcw 于 2021-4-22 13:35 编辑

阿奇_o 发表于 2021-4-18 22:56
按照“样例说明”,那不就等价于 就是求 出现次数最多的元素 的频数?
—— 这个“度”的 最短连续子列表 ...

可是在列表中,不一定都是连续的元素,比如说的度等于4,但是最短连续相同度的子列表却是,长度为6,所以要输出6的。也就是说一个列表中相同度的元素有多个或者元素之间不连续的话时,就可能会出现这种情况。题目没要求需要打印相对的子列表,只要输出长度就行,我是这么想的
页: [1]
查看完整版本: 怎么求相同度的最短连续子列表<新人求助>