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)
全部评论

相关推荐

迟缓的斜杠青年巴比Q...:简历被投过的公司卖出去了,我前两天遇到过更离谱的,打电话来问我有没有意向报班学Java学习,服了,还拿我学校一个学长在他们那报班学了之后干了华为OD当招牌
点赞 评论 收藏
分享
今天投了小鹏,收到了AI面,大概会问哪些啊?
期末一定及格:总共4个部分,心理测评、行测、然后就是问岗位、对岗位的理解、过往遇到了哪些难点怎么解决,很简单,没有什么特别专业的问题,都是一些综合素质相关的
小鹏汽车AI面7人在聊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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