原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-hard/xwgcuv/
解法一(python):
class Solution:
def longestConsecutive(self, nums: List[int]) -> int:
if len(nums) == 0:
return 0
nums_set = set(nums)
max_len = 0
for num in nums_set:
if num-1 not in nums_set:
current_num = num
current_len = 1
while current_num + 1 in nums_set:
current_len += 1
current_num += 1
max_len = max(max_len,current_len)
return max_len
思路:从题目中,我们需要知道的一个重点是,题目要求的是最大连续子序的长度,不是最大有序且连续的子序。
首先通过一个set去除数组中重复元素,设置一个变量记录最大子序长度,初始值为0,然后遍历这个set,判断当前元素-1是否在这个set中,(为什么要这么做,就是如果当前元素-1这个元素在这个set中,那么就表示当前元素是某个子序的中间元素,那么我们求出来的最大子序的长度一定是小于真实的最大子序的),然后记录当前元素的值和当前元素开始的最大子序(默认为1,因为从当前元素开始,本身就是一个子序),然后在从当前元素开始+1判断是否在set中,如果存在就继续循环,不存在就和前面的最大子序变量作比较,谁大谁就作为新的最大子序长度。最后返回即可。