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. 
题解:
因为整数的范围非常大,而且有负数,所以用map来标记和查找元素。
无序找连续元素,可以从某一已有元素开始,递增,递减的查找和它连续的元素是否存在,找过的元素及时从map中删除。
本来想用hash_map,但是没有这个库。。。所以用了map
class Solution {
public:
    int longestConsecutive(vector<int> &num) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        map<int, int> hmap;
        hmap.clear();
        int n = num.size();
        for(int i=0; i<n; i++){
            hmap.insert(pair<int, int>(num[i], i));
        }
        int ans=0, cnt=0;
        map<int, int>::iterator it;
        for(int i=0; i<num.size(); i++){
            int cur = num[i];
            it = hmap.find(num[i]);
            cnt++;
            if(it!=hmap.end()){
                map<int, int>::iterator iter;
                while(1){
                    iter = hmap.find(++cur);
                    if(iter==hmap.end())
                        break;
                    cnt++;    
                    hmap.erase(iter);
                }
                cur=num[i];
                while(1){
                    iter = hmap.find(--cur);
                    if(iter==hmap.end())
                        break;
                    cnt++;    
                    hmap.erase(iter);
                }
                if(ans<cnt)
                    ans = cnt;           
                cnt=0;
            }
            cnt=0;
        }
        return ans;
    }
};