题解 | #最长无重复子数组#

最长无重复子数组

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

滑动窗口

#
# 
# @param arr int整型一维数组 the array
# @return int整型
#
class Solution:
    def maxLength(self, arr):
        # write code here
        # 滑动窗口
        windows = 1
        cur = dict()
        chongfu = set()
        if len(arr) == 0:
            return 0
        begin = 0
        cur[arr[0]] = 1
        while (begin + windows < len(arr)):
            while begin + windows < len(arr) and (arr[begin + windows] not in cur) :
                cur[arr[begin + windows]] = 1
                windows += 1

            if begin + windows >= len(arr):
                break
            if cur[arr[begin]] == 1:
                cur.pop(arr[begin])
            else:
                cur[arr[begin]] = cur[arr[begin]] - 1
                if cur[arr[begin]] == 1:
                    chongfu.remove(arr[begin])
            if arr[begin + windows] not in cur:
                cur[arr[begin + windows]] = 1
            else:
                cur[arr[begin + windows]] += 1
                chongfu.add(arr[begin + windows])
            begin += 1
            while (begin + windows < len(arr) and len(chongfu) > 0):
                if cur[arr[begin]] == 1:
                    cur.pop(arr[begin])
                else:
                    cur[arr[begin]] = cur[arr[begin]] - 1
                    if cur[arr[begin]] == 1:
                        chongfu.remove(arr[begin])
                if arr[begin + windows] not in cur:
                    cur[arr[begin + windows]] = 1
                else:
                    cur[arr[begin + windows]] += 1
                    chongfu.add(arr[begin + windows])
                begin += 1
        return windows

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务