日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

128. Longest Consecutive Sequence

發布時間:2024/5/7 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 128. Longest Consecutive Sequence 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Title

給定一個未排序的整數數組,找出最長連續序列的長度。

要求算法的時間復雜度為 O(n)。

示例:

輸入: [100, 4, 200, 1, 3, 2]
輸出: 4
解釋: 最長連續序列是 [1, 2, 3, 4]。它的長度為 4。

Solve

暴力

沒想到啊,暴力的方法竟然能AC,直接排序,然后遍歷整個序列,判斷當前項與前一項的差,為0則continue,為1則+1,其它情況更新ans。

class Solution:def longestConsecutive(self, nums: List[int]) -> int:if not nums:return 0nums.sort()ans, temp = 0, 0for index in range(1, len(nums)):if nums[index] - nums[index - 1] == 1:temp += 1elif nums[index] - nums[index - 1] == 0:continueelse:ans = max(ans, temp)temp = 0ans = max(ans, temp)return ans + 1

哈希表:

考慮枚舉數組中的每個數 x,考慮以其為起點,不斷嘗試匹配 x+1, x+2, ? 是否存在,假設最長匹配到了 x+y,那么以 x 為起點的最長連續序列即為 x, x+1, x+2, ?,x+y,其長度為 y+1。

但仔細分析這個過程,我們會發現其中執行了很多不必要的枚舉,如果已知有一個 x, x+1, x+2,?,x+y 的連續序列,而我們卻重新從 x+1,x+2 或者是 x+y 處開始嘗試匹配,那么得到的結果肯定不會優于枚舉 x 為起點的答案,因此我們在外層循環的時候碰到這種情況跳過即可。

那么怎么判斷是否跳過呢?由于我們要枚舉的數 x 一定是在數組中不存在前驅數 x-1 的,不然按照上面的分析我們會從 x-1 開始嘗試匹配,因此我們每次在哈希表中檢查是否存在 x-1 即能判斷是否需要跳過了。

復雜度分析

時間復雜度:O(n),其中 n 為數組的長度。具體分析已在上面正文中給出。

空間復雜度:O(n)。哈希表存儲數組中所有的數需要 O(n) 的空間。

class Solution:def longestConsecutive(self, nums):longest_streak = 0num_set = set(nums)for num in num_set:if num - 1 not in num_set:current_num = numcurrent_streak = 1while current_num + 1 in num_set:current_num += 1current_streak += 1longest_streak = max(longest_streak, current_streak)return longest_streak

總結

以上是生活随笔為你收集整理的128. Longest Consecutive Sequence的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。