题目:给定一个未排序的整数数组 nums
,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
(请你设计并实现时间复杂度为 O(n)
的算法解决此问题。)
思路:(我笨拙的想法)先排序,选择了快排。遍历每个元素,查看元素i和他的下一个元素j,如果连续即nums[j]
= nums[i]+1
,则将 nums[j]
加入到 新序列longer_nums
中,并更新字典,新的列表作为值,列表长度为键。如果不连续,则重新构造一个longer_nums
,开始新的序列。不断循环,取出字典中最大的键(即最大长度)。
虽然但是,我的垃圾代码能实现,提交没问题,but内部逻辑很垃圾。误打误撞成功运行。
def quick_sort(arr):
if len(arr) <= 1:
return arr
else:
p = arr[len(arr) // 2] # 选择中间元素作为基准值
left = [x for x in arr if x < p]
middle = [x for x in arr if x == p]
right = [x for x in arr if x > p]
return quick_sort(left) + middle + quick_sort(right)
class Solution(object):
def longestConsecutive(self, nums0):
"""
:type nums0: List[int]
:rtype: int
"""
if len(nums0)==0:
return 0
if len(nums0)==1:
return 1
nums=quick_sort(nums0) # 应输出排序后的数组
longer_nums=[nums[0]]
print(nums)
dict={}
for i in range(len(nums)):
j=i+1
if j<len(nums):
# while i<len(nums):
# j=i+1
if nums[j]==nums[i]+1:
longer_nums.append(nums[j])
long = len(longer_nums)
# dict[long] = longer_nums[:]#from chatgpt的知识,之后对longer_nums的修改不会影响已存入字典的列表。但是提交显示超出内存限制
dict[long] = longer_nums
elif nums[j]==nums[i]:
longer_nums=longer_nums
long = len(longer_nums)
dict[long] = longer_nums
else:
longer_nums=[]
longer_nums.append(nums[j])
long = len(longer_nums)
dict[long] = longer_nums
print(dict)
print(dict)
# max_key = max(dict, key=dict.get)#从字典dict中找出拥有最大值的键
max_key = max(dict)
return max_key
看了新的方法:
下次更新!!