解題思路
基本上就是把不同的連續數列串在一起,每串的頭是最小的數,ex: 1->2->3->4。
所以先用 set 紀錄整個 array 中有哪些數字,接著再從頭看起。若該數是串的頭(不存在 nums[i]-1),哪麼就計算該串的長度(用 set 一直檢查 nums[i]+offset 存不存在)。
程式碼
class Solution { public: int longestConsecutive(vector<int>& nums) { if(nums.size() <= 1) return nums.size(); set<int> s; for(int i=0; i<nums.size(); i++) s.insert(nums[i]); int maxLen = 1; for(int i=0; i<nums.size(); i++) { // check if it the head of seq first if(!s.count(nums[i] - 1)) { int curLen = 1, offset = 1; while(s.count(nums[i] + offset)) { offset++; curLen++; maxLen = max(maxLen, curLen); } } } return maxLen; } };
沒有留言:
張貼留言