Longest Consecutive Sequence
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.
思想: 用Set(HashSet)来确定每一个数相邻的序列。
java代码:
- public int longestConsecutive(int[] num) {
- Set<Integer> data = new HashSet<Integer>();
- int nlen = num.length;
- if(nlen == 0) return 0;
- for(int i=0;i<nlen;i++) {
- data.add(num[i]);
- }
- int longest = 0;
- for(int i=0;i<nlen;i++) {
- int step = 0;
- int start = num[i];
- while(data.contains(start)){
- data.remove(start);
- start++;
- step++;
- }
- start = num[i]; //还是上一个起点
- while(data.contains(start-1)){
- step++;
- start--;
- data.remove(start);
- }
- if(step>longest) {
- longest = step;
- }
- }
- return longest;
- }
C++代码:了解 unordered_set 和java中的HashMap一致
- int longestConsecutive(vector<int> &num) {
- if(num.empty()) return 0;
- int i=0;
- int sz = num.size();
- unordered_set<int> numset;
- for(i=0;i<sz;i++) {
- if(numset.count(num[i])==0)
- numset.insert(num[i]);
- }
- int maxlg = 0;
- for(i=0;i<sz;i++) {
- int lg = 1;
- if(numset.count(num[i])!=0) {
- int c=num[i]+1;
- while(numset.count(c)!=0) {
- lg++;
- numset.erase(c);
- c++;
- }
- c = num[i]-1;
- while(numset.count(c)!=0) {
- lg++;
- numset.erase(c);
- c--;
- }
- }
- if(lg>maxlg) maxlg = lg;
- }
- return maxlg;
- }