[leetcode] longest consecutive sequence

来源:互联网 发布:aps c 全画幅 知乎 编辑:程序博客网 时间:2024/04/20 06:13

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.

这题我的第一反应是bitmap,但mapping过去之后,怎么搜这个bitmap又是一个很大的问题。

其实用hash就可以了,首先把数组放在hash表里, O(n)

从表里拿到一个元素之后查找它的前后元素在不在hash表中,找到了把当前元素删除。

每次查找和删除都是O(1),所以hash表的遍历复杂度也是O(n)

顺便贴一下STL里面hash删除的用法

by position (1)

iterator erase ( const_iterator position );
by key (2)
size_type erase ( const key_type& k );
range (3)
iterator erase ( const_iterator first, const_iterator last );
Versions (1)  (3) 返回被删除元素的下一个元素的iterator
Version (2) 返回被删除的元素个数


class Solution {public:    int longestConsecutive(vector<int> &num) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        unordered_set<int> hash;                for(int i = 0; i < num.size(); i++){            hash.insert(num[i]);        }                int ret = 0;        int cnt;                unordered_set<int>::iterator it;        int cur_elem;        int tmp_elem;                while(!hash.empty()){            it = hash.begin();            cur_elem = *it;            hash.erase(it);                        tmp_elem = cur_elem;            cnt = 1;                        while((it = hash.find(tmp_elem + 1))!= hash.end()){                hash.erase(it);                tmp_elem++;                cnt++;            }                        tmp_elem = cur_elem;            while((it = hash.find(tmp_elem - 1))!= hash.end()){                hash.erase(it);                tmp_elem--;                cnt++;            }                        ret = max(ret, cnt);        }                return ret;    }};


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 断奶涨奶怎么办又能防止乳房变形 孩子在幼儿园被小朋友打了怎么办 孩子在幼儿园被小朋友咬了怎么办 孩子被同学打了家长该怎么办? 孩子把同学打了打人家长该怎么办 孩子和同学发生矛盾家长该怎么办 孩子同学给孩子要东西家长该怎么办 如果遇到不讲理的孩子和家长怎么办 孩子调皮又被老师留校了怎么办 孩子拼音f和sh发音不清怎么办 自己在家生的孩子怎么办出生证明 在家念地藏经招来众生不走怎么办 家是济宁孩子上学想在济南上怎么办 高一孩子成绩严重下滑家长怎么办 商铺租客不交租金又不搬走怎么办 考试试卷找不到了明天要交怎么办 8个月宝宝不爱吃蔬菜泥怎么办 5个月的宝宝拉肚怎么办 一岁宝宝大便拉不出来怎么办 八个月宝宝便秘拉不出来怎么办 10个月宝宝大便拉水怎么办 4个月的孩子大便拉水怎么办 五个多月宝宝大便拉水怎么办 七个月宝宝大便还没成行怎么办 宝宝一岁了还没长牙怎么办 宝宝什么都会就差不会独占怎么办 两岁宝宝肚子不舒服还吐怎么办 两岁宝宝吃坏肚子吐怎么办 1岁半儿童牙烂了怎么办 一岁宝宝吃了就吐怎么办 两岁宝宝龋齿门牙掉了怎么办 一岁宝宝冻着了呕吐怎么办 两岁宝宝喉咙有痰呼呼响怎么办 1岁宝宝吐的水水怎么办 宝宝吐了5 6次了怎么办 7岁儿童吃了就吐怎么办 狗狗拉稀呕吐不吃饭只喝水怎么办 宝宝吃坏肚子上吐下泄怎么办 一岁宝宝又吐又拉怎么办 八个月宝宝吃什么吐什么怎么办 九个月宝宝吃什么吐什么怎么办