最长连续递增子序列(部分有序)
最长连续递增子序列(部分有序)
是什么?
在一个序列中,序列中的某段呈递增(递减)趋势,且一个序列中有很多段此序列,求其中最长的一个最长递增(递减)子序列。例如[1,9,2,5,7,3,4,6,8,0],则最长递增子序列为[3,4,6,8].
思路:
像此类型的问题,我们可以采用两个类似于指针的标识物,来帮我们进行统计。一个指针标识物用于固定开始位置,另一个指针标识物用来循迹序列。(即双指针,也叫快慢指针)
解法?
方法:
a=[]
for i in input().split(' '):
a.append(eval(i))
b=[]//b列表中两两相邻的两个分别表示开始的位置和到哪里结束。例如:[0,2,2,3,5,4,9,1]相同两个表示为一组
c=len(a)-1
count=1
begin=end=0
while begin<c:
b.append(begin) //将每次的开始位置存入到b列表中
end=begin
for j in range(end,c)://从每次的开始位置进行循迹
if a[j]<=a[j+1]://若符合循迹要求,则进行记录,即count++
count+=1
else:
b.append(count)//若不符合循迹要求,则将count存入b列表中,确定下一次开始的位置并且推出内循环。
count=1
begin=j+1
break
if begin==c:
b.append(begin)
b.append(count)
d=len(b)-1
max=b[1]
for j in range(1,d,2)://找出符合条件的要求的最大递增子序列
if max<b[j]:
max=b[j]
f=j
print(b)
for k in range(b[f-1],b[f-1]+max):
print(a[k])
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架