题目描述:
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
思路:
1、先用set去重,再用sorted()排序
2、为了降低时间复杂度,对于排好序的newset中的元素i:如果i-1在newset中,那么就跳过(否则会重复计算),如果不在newset中,就加入数组split
3、split中记录的是不连续的开始(因为连续的都被跳过了,不连续的才会被记录),然后求差值,返回差值最大的那个
代码:
newset = set(nums)
newset = sorted(newset)
split = []
datalist = {}
anslist = []
i = 0
if not nums:#如果为空数组
return 0
for num in newset:
datalist[num] = i
i += 1
for i in datalist.keys():
if i-1 not in datalist.keys():
split.append(i)
if len(split) == 1:#如果为连续数组
return len(newset)
else:
i = 0
while i< len(split)-1:
ans1 = datalist[split[i+1]] - datalist[split[i]]
anslist.append(ans1)
i += 1
a = max(x for x in newset)
if a not in split:#如果从某个位置到最后都是连续的,要处理边界条件
split.append(a)
anslist.append(datalist[split[-1]] - datalist[split[-2]]+1)
return max(anslist)
收获:
第一次做hard题,改了好久…我好菜啊好菜,边界条件真难求