鱼C论坛

 找回密码
 立即注册
查看: 2140|回复: 4

[已解决]求助 最长相等子序列长度 Python

[复制链接]
发表于 2020-12-21 22:54:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
7-4 最长相等子序列长度
给定一个有n个元素的整数数组b,b中连续的相等元素构成的子序列称为平台。设计一个算法求b中最长平台的长度。

输入格式:
第一行为一个数字m,表示下面有m组数据,每组数据包括2行或者1行,n>0时,每组数据中的第一行表示数组的长度n(n<=20),第二行表示数组的所有元素;空表n=0时,只有一行输入。

输出格式:
输出最长平台的长度。(注:当n=0时,输出0。)

输入样例:
在这里给出一组输入。例如:
2
8
11 3 8 8 8 8 8 7
10
11 3 3 25 7 8 8 8 8 8
输出样例:
在这里给出相应的输出。例如:
5
5
最佳答案
2020-12-25 13:07:29
欧德奈瑞 发表于 2020-12-23 21:24
大佬 要返回的不是出现最多的元素 是该元素的次数哦(输出格式:输出最长平台的长度。)
def showmax(lt):
 
    index1 = 0                       #记录出现次数最多的元素下标
 
    max = 0                          #记录最大的元素出现次数
 
    for i in range(len(lt)):
 
        flag = 0                    #记录每一个元素出现的次数
 
        for j in range(i+1,len(lt)): #遍历i之后的元素下标
 
            if lt[j] == lt[i]:
 
                flag += 1           #每当发现与自己相同的元素,flag+1
 
        if flag > max:              #如果此时元素出现的次数大于最大值,记录此时元素的下标
            max = flag
            index1 = i
 
    return lt.count(lt[index1])               #返回出现最多的元素的次数
m=int(input())
lst=[]
while m:
    n = int(input())
    if n !=0:
        lstn = [int(i) for i in input().split(' ')]
    else:
        lstn = []
    lst.append(lstn)

    m-=1
for i in lst:
    try:
        print(showmax(i))
    except:
        pass
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-22 16:55:47 | 显示全部楼层
本帖最后由 逃兵 于 2020-12-22 17:00 编辑
def showmax(lt):
 
    index1 = 0                       #记录出现次数最多的元素下标
 
    max = 0                          #记录最大的元素出现次数
 
    for i in range(len(lt)):
 
        flag = 0                    #记录每一个元素出现的次数
 
        for j in range(i+1,len(lt)): #遍历i之后的元素下标
 
            if lt[j] == lt[i]:
 
                flag += 1           #每当发现与自己相同的元素,flag+1
 
        if flag > max:              #如果此时元素出现的次数大于最大值,记录此时元素的下标
            max = flag
            index1 = i
 
    return lt[index1]               #返回出现最多的元素
m=int(input())
lst=[]
while m:
    n = int(input())
    if n !=0:
        lstn = [int(i) for i in input().split(' ')]
    else:
        lstn = []
    lst.append(lstn)

    m-=1
for i in lst:
    try:
        print(showmax(i))
    except:
        pass
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-12-23 21:24:29 | 显示全部楼层

大佬 要返回的不是出现最多的元素 是该元素的次数哦(输出格式:输出最长平台的长度。)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-25 13:07:29 | 显示全部楼层    本楼为最佳答案   
欧德奈瑞 发表于 2020-12-23 21:24
大佬 要返回的不是出现最多的元素 是该元素的次数哦(输出格式:输出最长平台的长度。)
def showmax(lt):
 
    index1 = 0                       #记录出现次数最多的元素下标
 
    max = 0                          #记录最大的元素出现次数
 
    for i in range(len(lt)):
 
        flag = 0                    #记录每一个元素出现的次数
 
        for j in range(i+1,len(lt)): #遍历i之后的元素下标
 
            if lt[j] == lt[i]:
 
                flag += 1           #每当发现与自己相同的元素,flag+1
 
        if flag > max:              #如果此时元素出现的次数大于最大值,记录此时元素的下标
            max = flag
            index1 = i
 
    return lt.count(lt[index1])               #返回出现最多的元素的次数
m=int(input())
lst=[]
while m:
    n = int(input())
    if n !=0:
        lstn = [int(i) for i in input().split(' ')]
    else:
        lstn = []
    lst.append(lstn)

    m-=1
for i in lst:
    try:
        print(showmax(i))
    except:
        pass
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-12-26 07:00:10 | 显示全部楼层
感谢大佬的帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 01:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表