1. 程式人生 > 遊戲攻略 >《V Rising(吸血鬼崛起)》天災石位置及製作方法 怎麼刷天災石

《V Rising(吸血鬼崛起)》天災石位置及製作方法 怎麼刷天災石

128. 最長連續序列

給定一個未排序的整數陣列 nums ,找出數字連續的最長序列(不要求序列元素在原陣列中連續)的長度。

請你設計並實現時間複雜度為 O(n) 的演算法解決此問題。

示例 1:

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

示例 2:

輸入:nums = [0,3,7,2,5,8,4,6,0,1]
輸出:9

提示:

  • 0 <= nums.length <= 105
  • -109 <= nums[i] <= 109

思路:

​ 實現O(n)的時間複雜度,我們可以利用雜湊表實現,首先由於有重複數字,所以使用雜湊表去重

,對於是否連續我們只要看雜湊表中是否存在i+1這個數即可,注意要從起點開始找,因此是起點的話i-1這個數一定不在雜湊表中。

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        int n=nums.size();
        unordered_set<int>st;//雜湊表去重
        for(int i=0;i<n;i++){
            st.insert(nums[i]);
        }
        int ans=0;
        for(auto t : st){
            if(!st.count(t-1)){//從起點開始尋找
                 int longestNum=1;
                 int cur=t+1;
                 while(st.count(cur++))longestNum++;
                 ans=max(ans,longestNum);
            }
        }
        return ans;
    }
};