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 ...
随机推荐
- 题目1373:整数中1出现的次数(从1到n整数中1出现的次数)
题目1373:整数中1出现的次数(从1到n整数中1出现的次数) 题目描述: 亲们!!我们的外国友人YZ这几天总是睡不好,初中奥数里有一个题目一直困扰着他,特此他向JOBDU发来求助信,希望亲们能帮帮他 ...
- SQL Server中解决死锁
SQL Server中解决死锁的新方法介绍 数据库操作的死锁是不可避免的,本文并不打算讨论死锁如何产生,重点在于解决死锁,通过SQL Server 2005, 现在似乎有了一种新的解决办法. 将下面的 ...
- 部署Apache网站访问统计-AWStats分析系统
环境根据:http://www.cnblogs.com/zzzhfo/p/5925786.html 1.安装AWStats软件包 将软件包解压到httpd服务器中的/usr/lcoal/目录下 [ro ...
- ajax验证登录注册
<form id="form1" onsubmit="return false;"> <table id="login-table& ...
- word20161129
1. nested 英[nestɪd]美[nestɪd]adj. 嵌套的;v. 筑巢( nest的过去式和过去分词 );[例句]In the makeGrades method I use a cod ...
- PYTHON seek()tell()语句
print(f.tell()) # 显示当前位置 f.seek(0) #回到某一起点
- 3.创建基本的AngularJS应用
1.1.模块 AngularJS引入了代表应用程序组件的模块的概念.模块提供命名空间,以基于模型的名称来引用指令,范围和其他组件.使得包装和再利用应用程序的部件更容易. AngularJS中,每个视图 ...
- CodeIgniter框架下载辅助函数的一个小bug
if (strpos($_SERVER['HTTP_USER_AGENT'], "MSIE") !== FALSE) { header('Content-Type: '.$mime ...
- 二分图水一波~~~~d带你飞
Current Time: 2016-03-11 17:45:36 Contest Type: Public Start Time: 2016-03-04 13:00:00 Contest Statu ...
- Linux 文件rwx权限问题 chmod 777 XXX 任何人拥有最高权限
在Unix和Linux的各种操作系统下,每个文件(文件夹也被看作是文件)都按读.写.运行设定权限.ls -l:得到-rw-r--r-- 1 apple users 2254 2006-05-20 13 ...