Problem:
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
For example,
Given [100, 4, 200, 1, 3, 2]
,
The longest consecutive elements sequence is [1, 2, 3, 4]
. Return its length: 4
.
Your algorithm should run in O (n) complexity.
Hide TagsArrayTest instructions: Finding the longest contiguous subsequence in a random ordinal group (no order required)
Thinking:
(1) requires time complexity of O (n), can only use Hashtable.
(2) Unordered_map bottom is realized with Hashtable, can take as Hashtable use
Code
Class Solution {Public:int longestconsecutive (vector<int> &num) {unordered_map<int,int> Hashta ble for (int i = 0;i < Num.size (); i++) {if (Hashtable.find (num[i])! = Hashtable.end ()) continue; int minus_1 = num[i]-1; int plus_1 = num[i] + 1; Unordered_map<int,int>::iterator Minus_1iter,plus_1iter; Minus_1iter = Hashtable.find (minus_1); Plus_1iter = Hashtable.find (plus_1); if (Minus_1iter! = Hashtable.end () && plus_1iter! = Hashtable.end ()) {Hashtable[num[i]] = Hashtable [Minus_1] + hashtable[plus_1] + 1; Hashtable[num[i]-hashtable[minus_1]] = hashtable[num[i]]; Hashtable[num[i] + hashtable[plus_1]] = hashtable[num[i]]; } else if (Minus_1iter = = Hashtable.end () && Plus_1iter = = Hashtable.end ()) {Hashtable[n Um[i]] = 1; } else if (minus_1iter! = Hashtable.end ()) {Hashtable[num[i]] = Hashtable[minus_1] + 1; Hashtable[num[i]-hashtable[minus_1]] = hashtable[num[i]]; } else {Hashtable[num[i]] = Hashtable[plus_1] + 1; Hashtable[num[i] + hashtable[plus_1]] = hashtable[num[i]]; }}//find the maxlen int ans = int_min; for (Unordered_map<int,int>::iterator iter = Hashtable.begin (); ITER! = Hashtable.end (); ++iter) {if (iter-& Gt;second > ans) ans = iter->second; } return ans; }};
Leetcode | | 128, longest consecutive Sequence