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 ...
随机推荐
- Mysql BLOB和TEXT类型
BLOB是一个二进制大对象,可以容纳可变数量的数据.有4种BLOB类型:TINYBLOB.BLOB.MEDIUMBLOB和LONGBLOB.它们只是可容纳值的最大长度不同. A binary la ...
- MongoDB的学习和使用(查询find)
语法 MongoDB 查询数据的语法格式如下: >db.COLLECTION_NAME.find() find() 方法以非结构化的方式来显示所有文档. 如果你需要以易读的方式来读取数据,可以使 ...
- jquery版时钟(css3实现)
做时钟的主要原因是因为喜欢,觉得它好看(本人对特效有点爱不释手……).做的时候感觉工程量会有点大,做着做着发现实现起来其实并不难,只要理清思绪,其实还蛮简单的(我制作东西喜欢整体方向制定好,然后边做边 ...
- BZOJ 2412: 电路检修
Description [0,x]中全是1,其余全是0,每个点有一个权值,求最坏情况下得到x的最小权值. Sol DP+单调队列. 你可以去看我的这篇Blog...开这篇纯属为了骗访问... http ...
- dropify插件的字符串
1.可以拖拽图片进行上传. 2.使用起来方便. 3.不能进行视频与其他文件的上传,只能上传图片. 4.其余都像普通<input type="file">. 5.在dro ...
- Bitnami --https://bitnami.com/stacks
Bitnami is an app store for server software. Install your favorite applications in your own servers ...
- appium + python 环境搭建
所需:JDK.Android SDK.Appium服务程序.Appium客户端程序 1. 安装最新的JDK,并配置环境变量. JAVA_HOME=C:\Program Files (x86)\Java ...
- Qt字符转换
1.QString -> char* #include<QTextCodec> QTextCodec::setCodecForLocale(QTextCodec::codecFor ...
- buffer正确的拼接方式
var chunks = []; var size = 0; res.on('data',function(chunk){ chunks.push(chunk); size+= chunk.lengt ...
- Pooled Allocation(池式分配)实例——Keil 内存管理
引言:说到动态申请(Dynamic Allocation)内存的好处,学过C/C++的人可能都有体会.运行时的灵活申请自然要比编码时的猜测好的多.而在内存受限情况下这种灵活性又有特别的好处--能让我们 ...