《V Rising(吸血鬼崛起)》天災石位置及製作方法 怎麼刷天災石
阿新 • • 發佈:2022-05-28
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; } };