给定无序数组arr,返回其中最长的连续序列的长度(要求值连续,位置可以不连续,例如 3,4,5,6为连续的自然数)
数据范围: ,数组中的值满足
要求:空间复杂度 ,时间复杂度
标准的滑动窗口写法
class Solution: def MLS(self , arr: List[int]) -> int: N = len(arr) arr.sort() def check(l, r, rep): # O(1) 判断是否连续 return l < r and arr[r] - arr[l] != r - l - rep l, r = 0, 0 rep = 0 ret = 0 while r < N: while check(l, r, rep): # 当不满足时,右移 l if l + 1 < N and arr[l] == arr[l + 1]: rep -= 1 l += 1 ret = max(ret, r - l + 1 - rep) if r + 1 < N and arr[r] == arr[r + 1]: rep += 1 r += 1 return ret
class Solution: def MLS(self , arr ): # write code here # 对数组去重 arr_set = set(arr) ans = 0 for i in range(len(arr)): # 寻找多个连续子序列中最小值 if arr[i] -1 in arr_set: continue start = arr[i] while start in arr_set: start += 1 # 比较每个连续子序列的长度 ans = max(ans, start - arr[i]) return ans