LeetCode: Longest Consecutive Sequence

LeetCode: 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.

地址:https://oj.leetcode.com/problems/longest-consecutive-sequence/

算法:其实这道题最重要的是利用map中可以按关键字有序遍历的特性。首先,将数组中所有元素存储在map里,这样相当与可以在线性时间内对数组排序,其实就是用空间换时间的方法。代码:

 1 class Solution {
 2 public:
 3     int longestConsecutive(vector<int> &num) {
 4         if(num.empty())    return 0;
 5         map<int, int> hash_table;
 6         for(int i = 0; i < num.size(); ++i){
 7             hash_table[num[i]] = num[i];
 8         }
 9         map<int,int>::iterator it = hash_table.begin();
10         int max_length = 1;
11         int pre_ele = it->first;
12         int length = 1;
13         ++it;
14         for(; it != hash_table.end(); ++it){
15             if(it->first == pre_ele + 1){
16                 ++length;
17             }else{
18                 if(length > max_length){
19                     max_length = length;
20                 }
21                 length = 1;
22             }
23             pre_ele = it->first;
24         }
25         if(length > max_length)
26             max_length = length;
27         return max_length;
28     }
29 };

 

posted on 2014-08-24 19:37 Boostable 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/boostable/p/leetcode_longest_consecutive_sequence.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值