128. Longest Consecutive Sequence(leetcode)
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.
Subscribe to see which companies asked this question
如果允许$O(n \log n)$的复杂度,那么可以先排序,可是本题要求$O(n)$。
由于序列里的元素是无序的,又要求$O(n)$,首先要想到用哈希表。
用一个哈希表 {unordered_map<int, bool> used}记录每个元素是否使用,对每个元素,以该元素为中心,往左右扩张,直到不连续为止,记录下最长的长度。
// Leet Code, Longest Consecutive Sequence
// 时间复杂度O(n),空间复杂度O(n)
class Solution {
public:
int longestConsecutive(const vector<int> &num) {
unordered_map<int, bool> used;
for (auto i : num) used[i] = false;
;
for (auto i : num) {
if (used[i]) continue;
;
used[i] = true;
; used.find(j) != used.end(); ++j) {
used[j] = true;
++length;
}
; used.find(j) != used.end(); --j) {
used[j] = true;
++length;
}
longest = max(longest, length);
}
return longest;
}
};
|
67 / 67 test cases passed.
|
Status:
Accepted |
|
Runtime: 26 ms
|
// Leet Code, Longest Consecutive Sequence
// 时间复杂度O(n),空间复杂度O(n)
// Author: @advancedxy
class Solution {
public:
int longestConsecutive(vector<int> &num) {
unordered_map<int, int> map;
int size = num.size();
;
; i < size; i++) {
if (map.find(num[i]) != map.end()) continue;
map[num[i]] = ;
) != map.end()) {
l = max(l, mergeCluster(map, num[i] - , num[i]));
}
) != map.end()) {
l = max(l, mergeCluster(map, num[i], num[i] + ));
}
}
? : l;
}
private:
int mergeCluster(unordered_map<int, int> &map, int left, int right) {
;
;
;
map[upper] = length;
map[lower] = length;
return length;
}
};
class Solution {
public:
int longestConsecutive(vector<int> &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
priority_queue<int> Q;
; i < num.size(); i++) {
Q.push(num[i]);
}
;
;
int temp = Q.top();
Q.pop();
while (!Q.empty()) {
== Q.top()) {
temp -= ;
maxlen += ;
} else if (temp != Q.top()) {
temp = Q.top();
maxlen = ;
}
Q.pop();
ret = max(maxlen, ret);
}
return ret;
}
};
// O(n) solution
class Solution {
public:
int longestConsecutive(vector<int> &num) {
unordered_map<int, int> longest;
;
; i < num.size(); i++) {
) {
continue;
}
];
];
;
longest[num[i]] = bound;
longest[num[i]-leftbound] = bound;
longest[num[i]+rightbound] = bound;
if (result < bound) {
result = bound;
}
}
return result;
}
};
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <iostream>
#include <unordered_set>
#include <vector>
#include <set>
#include <algorithm> // sort
#include <functional>//greater<type>() model
using namespace std;
class Solution {
public:
vector<int>::iterator vii;
set<int>::iterator sii;
int longestConsecutive(vector<int>& nums) {
;
;
sort(nums.begin(), nums.end(), less<int>());
for (vii = nums.begin(); vii != nums.end();) {
int tmp;
tmp = *vii;
int next = *++vii;
if(tmp == next){
//++vii;
continue;
}
) != next){
if(result < ret){
result = ret;
}
ret = ;
continue;
}else {
ret++;
}
}
/*
set<int> si;
//copy(nums.begin(), nums.end(), std::back_inserter(si));
copy(nums.begin(), nums.end(), si.begin());
//sort(nums.begin(), nums.end(), less<int>());
for (sii = si.begin(); sii != si.end();) {
int tmp;
tmp = *sii;
int next = *++sii;
if((tmp+1) != next){
if(result < ret){
result = ret;
}
ret = 0;
continue;
}else if(tmp == next){
continue;
}else {
ret++;
}
}*/
if(result < ret){
result = ret;
}
return result;
}
};
int main() {
//int arr[] = {9,1,4,7,3,-1,0,5,8,-1,6};
,,,,};
]);
vector<int> nums(arr, arr+len);
Solution s;
cout << s.longestConsecutive(nums) <<endl;
;
}
|
67 / 67 test cases passed.
|
Status:
Accepted |
|
Runtime: 16 ms
|
哈希map是一种关联容器,通过键值和映射值存储元素。允许根据键值快速检索各个元素。
插入数据使用 insert方法,查找则使用find方法,find方法返回unordered_map的iterator,如果返回为end()表示未查找到,否则表示查找到。boost::unordered_map是计算元素的Hash值,根据Hash值判断元素是否相同。所以,对unordered_map进行遍历,结果是无序的。
128. Longest Consecutive Sequence(leetcode)的更多相关文章
- [LeetCode] 128. Longest Consecutive Sequence 解题思路
Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...
- [LeetCode] 128. Longest Consecutive Sequence 求最长连续序列
Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...
- 【LeetCode】128. Longest Consecutive Sequence
Longest Consecutive Sequence Given an unsorted array of integers, find the length of the longest con ...
- Binary Tree Longest Consecutive Sequence -- LeetCode
Given a binary tree, find the length of the longest consecutive sequence path. The path refers to an ...
- Java for LeetCode 128 Longest Consecutive Sequence
Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...
- leetcode 128. Longest Consecutive Sequence ----- java
Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...
- [leetcode]128. Longest Consecutive Sequence最长连续序列
Given an unsorted array of integers, find the length of the longest consecutive elements sequence. Y ...
- Leetcode 128. Longest Consecutive Sequence (union find)
Given an unsorted array of integers, find the length of the longest consecutive elements sequence. Y ...
- LeetCode 128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.Fo ...
随机推荐
- iOS开发——高级篇——iOS 中的 NSTimer
以前的老代码在使用 NSTimer 时出现了内存泄露 NSTimer fire 我们先用 NSTimer 来做个简单的计时器,每隔5秒钟在控制台输出 Fire .比较想当然的做法是这样的: 1 2 3 ...
- Unity手游之路<一>C#版本Protobuf
http://blog.csdn.net/janeky/article/details/17104877 个游戏包含了各种数据,包括本地数据和与服务端通信的数据.今天我们来谈谈如何存储数据,以及客户端 ...
- git 教程(11)--从远程库克隆
上次我们讲了先有本地库,后有远程库的时候,如何关联远程库. 现在,假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆. 首先,登陆GitHub,创建一个新的仓库,名字叫gitskill ...
- winkawaks模拟器
Winkawaks (温科沃克斯)win+ka(日文)+wa(也是日文)+k+s 最好的街机模拟器之一,与Nebula和MAME齐名,支持的游戏的有CAPCOM公司的CPS1,CPS2所有游戏,如三国 ...
- Linux--多网卡的7种Bond模式
网卡bond是通过把多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡.在应用部署中是一种常用的技术,我们公司基本所有的项目相关服务器都做了bond,这里总结整理,以便待查. bond ...
- Peeking Iterator
Given an Iterator class interface with methods: next() and hasNext(), design and implement a Peeking ...
- VS中计算程序运行时间
VS中计算程序运行的时间 http://bbs.csdn.net/topics/39068881 有时候在设计程序完了之后需要计算程序运行的时间. 这时候可以使用Windows的库函数 GetIi ...
- POJ 1258
http://poj.org/problem?id=1258 今天晚上随便找了两道题,没想到两道都是我第一次碰到的类型———最小生成树.我以前并没有见过,也不知道怎么做,然后就看书,思路很容易理解 但 ...
- centos 7 python2.7.5升级到3.5.2
centos 7 python2.7.5升级到3.5.2 下载python3.5.2 wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2 ...
- zpf 获取表单等数据的用法
2015年4月12日 12:25:35 星期日 zpf框架中获取表单数据的方法 //获得get,post,url中的数据 private function setData() { $this-> ...