python | #最长无重复子数组#

最长无重复子数组

http://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4

思路1,使用一个临时数组作为子数组,遍历一遍

class Solution:
    def maxLength(self , arr ):
        if len(arr) in [0,1]:
            return len(arr)
        max_sub = 0 #最大无重复长度
        tem_arr = [] #子数组
        for i in arr:
            if i not in tem_arr: #当前值不在子数组中
                tem_arr.append(i)
                max_sub = max(max_sub,len(tem_arr))
            else:
                start = tem_arr.index(i) #当前值在子数组中
                tem_arr = tem_arr[start+1:] #从重复元素的下一个开始重新计算
                tem_arr.append(i)
        return max_sub

双指针

class Solution:
    def maxLength(self , arr ):
        if len(arr) in [0,1]:
            return len(arr)
        longest_length,i,j = 0, 0, 0
        arr_length = len(arr)
        while j < arr_length:
            try:
                index = arr[i:j].index(arr[j]) #若切片内存在下一个值,更新左指针
                longest_length = max(longest_length, j-i)
                i = index+i+1
            except ValueError:#若不存在 跳过
                pass
            j += 1 #右指针每次向前一步

        return max(longest_length, j-i)
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-27 14:11
很喜欢小米的新车,校招薪资每月22k,攒多久能买?
测试糕手手:别看工资,先看现金流存款。有50W存款以上再考虑,车是消耗品,选适合自己的重要。你有钱就当我没说过
点赞 评论 收藏
分享
流浪的神仙:无恶意,算法一般好像都得9硕才能干算法太卷啦
点赞 评论 收藏
分享
06-23 11:28
门头沟学院 Java
牛客91966197...:也有可能是点拒绝的时候自动弹的话术
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务