最长连续不重复子序列python题解-双指针

   看了很久,发现这道题目应该是有些前提的,以至于我开始一直往错的方向去想,将题目大大复杂化了
在csdn上看了许多博客文章,终于在看到12235这道例题的答案是235才恍然大悟,反应过来。
这题很简单一直被连续(类似12345)再不重复所误导。实际上是连续不出现重复的序列(前提)
那么知道了前提,我们就讲下解题思路吧!

    首先需要知道本题是双指针思想:有一个i指针和一个j指针。i指针遍历整个序列(一直走在前面),我们把其称为快指针;j指针用来标记连续不重复子序列最前面的下标,
我们把其称为慢指针。快指针i不断前进,将每个数字存入对应的列表对应的位置s(s[i]表示数字s[i]出现的频率),快指针i每次移动一次更新res(最长连续不重复子序列长度)。当出现s[i]大于1,表示当前i下标和i-1位置出现重复,s[i]==s[i-1]。此时快指针i停止向前移动,慢指针需要移动当前位置,去掉重复,也就是s[q[j]]-=1,将出现重复之前的所有以经添加的数据删除,重新开始计算最长连续不重复子序列区间。

题目:

给定一个长度为n的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。

输入格式
第一行包含整数n。

第二行包含n个整数(均在0~100000范围内),表示整数序列。

输出格式
共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。

数据范围
1≤n≤100000
输入样例:
5
1 2 2 3 5
输出样例:
3
 

 附上python源码:

n=int(input())
    # 序列
    q=list(map(int,input().split()))
    # 各个数字出现的频率序列
    s=[0 for i in range(100000)]
    res=0  #当前下标前的最长连续不重复序列的长度
    i=0
    j=0
    while i<n:
        s[q[i]]+=1
        while j<i and s[q[i]]>1:#出现重复
            s[q[j]]-=1          #因为出现重复,目的是为了让指针j移动至指针i,将重复之前的所有已添加的数据去除,重新开始计算最长连续不重复子序列区间
            j+=1
        res=max(res,i-j+1)
        i+=1
    print(res)

此篇有相应的图解可以参考:https://blog.csdn.net/qq_61607790/article/details/122798100icon-default.png?t=M85Bhttps://blog.csdn.net/qq_61607790/article/details/122798100

以下两篇对我的帮助非常大(可以参考学习):(91条消息) 基础算法-最长连续不重复子序列_ai_XZP_master的博客-CSDN博客_最长不重复子序列icon-default.png?t=M85Bhttps://blog.csdn.net/qq_27262727/article/details/104233554?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-104233554-blog-106222438.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-104233554-blog-106222438.pc_relevant_3mothn_strategy_recovery&utm_relevant_index=4

 15.最长连续不重复子序列 - haust_fx - 博客园 (cnblogs.com)icon-default.png?t=M85Bhttps://www.cnblogs.com/fx1998/p/12824375.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值