首页 > 试题广场 >

最长无重复子数组

[编程题]最长无重复子数组
  • 热度指数:331551 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个长度为n的数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。
子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组

数据范围:
示例1

输入

[2,3,4,5]

输出

4

说明

[2,3,4,5]是最长子数组        
示例2

输入

[2,2,3,4,3]

输出

3

说明

[2,3,4]是最长子数组        
示例3

输入

[9]

输出

1
示例4

输入

[1,2,3,1,2,3,2,2]

输出

3

说明

最长子数组为[1,2,3]       
示例5

输入

[2,2,3,4,8,99,3]

输出

5

说明

最长子数组为[2,3,4,8,99]     
new_list
class Solution:
    def maxLength(self , arr: List[int]) -> int:
        # write code here
        max=0
        new_list=[]
        for i in range(len(arr)):
            if arr[i] not in new_list:
                new_list.append(arr[i])        
            else:
                tag=new_list.index(arr[i])+1
                if max <=len(new_list):
                    max=len(new_list)
                new_list=new_list[tag:]
                new_list.append(arr[i])
        if max <=len(new_list):
            return len(new_list)
        else:
            return max       

发表于 2022-12-17 15:32:02 回复(0)
直接对数组进行去重,得到新的数组,进行排列,求长度就行了(仅仅是求长度,不排列也行),
python,简单的数组去重:new_arr=list(set(arr))
发表于 2022-03-06 12:22:42 回复(5)
class Solution:
    def maxLength(self , arr: List[int]) -> int:
        max_value=0
        Lists=list()
        for i in arr:
            if i in Lists:
                max_value=max(max_value,len(Lists))
                while i in Lists:
                    Lists.pop(0)
            Lists.append(i)
        max_value=max(max_value,len(Lists))
        return max_value

发表于 2021-12-25 01:06:56 回复(0)
class Solution:
    def maxLength(self , arr ):
        maxlen=0
        stack=[]
        for i in arr:
            while i in stack:
                stack.pop(0)
            stack.append(i)
            maxlen=max(maxlen,len(stack))
        return maxlen
暴力法
发表于 2021-09-01 10:37:36 回复(0)
队列的思想,队列和堆栈的不同是:先进先出,所以要用pop(0)来剔除首元素
class Solution:
    def maxLength(self , arr ):
        # write code here
        res = 0
        l = list()
        for i in arr:
            while i in l:
                l.pop(0)
            l.append(i)
            res = max(res, len(l))
        return res

发表于 2021-08-11 17:27:56 回复(0)

解法类似双指针,用一个列表节约空间

class Solution:
    def maxLength(self , arr ):
        # write code here
        l = []
        m = 0
        n = 0
        for i in arr:
            if i not in l:
                l.append(i)
                n += 1
            else:
                m = max(m,n)
                l = l[l.index(i)+1:]
                l.append(i)
                n = len(l)
        return max(m,n)
发表于 2021-07-15 18:24:02 回复(0)

问题信息

难度:
7条回答 18612浏览

热门推荐

通过挑战的用户

查看代码