python[LeetCode]最長連続シーケンス

4217 ワード

並べ替えられていない整数配列を指定し、最長連続シーケンスの長さを見つけます.
要求アルゴリズムの時間的複雑度はO(n)である.

入力:[100,4,200,1,3,2]出力:4解釈:最長連続シーケンスは[1,2,3,4]である.その長さは4です.
考え方という問題は難しくないが、以下の状況を考慮しなければならない.一.配列が空の場合、戻り長は0 2となる.シーケンス[0,1,1,2]に遭遇した場合は、4ではなく長さ3を返す必要があります.
私の考え方は時間の複雑さはO(2 n)で、規範に合わないので、後で改善する時間があります.配列を(小さいものから大きいものまで)並べ替えてから、配列の要素を巡ります.現在の値が前の値より1大きい場合、temp+1、現在の値が前の値と等しい場合、pass(操作しない)はtempとresultの最大値をresultに返し、temp=1として遍歴を継続します.
コード68例、60 msかかり、50%python 3を破って記録を提出
class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        if not nums:   
            return 0
        nums.sort()
        result = 1     #    ,    1
        temp = 1       #  ,              
        length = len(nums)
        for i in range(1,length):
            if (nums[i] -nums[i-1]) == 1:
                temp += 1
            elif (nums[i] -nums[i-1]) == 0:
                pass
            else:
                result = max(result,temp)
                temp = 1
        result = max(result,temp)
        return result