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 ...
随机推荐
- git之create local reposition(创建本地仓库)
1.创建名为git-reposition的仓库 mkdir home/sunjf/git-reposition 注:home/sunjf可以指定为你想要的路径下面 2.初始化仓库 cd ~/git-r ...
- js null和undefined
在JavaScript开发中,被人问到:null与undefined到底有啥区别? 一时间不好回答,特别是undefined,因为这涉及到undefined的实现原理. 总所周知:null == un ...
- tomcat JNDI 设置
一.在Spring配置文件中的配置 <bean id="dataSource" class="org.springframework.jndi.JndiObje ...
- mongodb安装 window
安装MongoDB 1.按照操作系统下载http://www.mongodb.org/downloads. 2.在D盘新建MongoDB文件夹(此文件夹为自定义的数据库安装目录D:\MongoDB)把 ...
- ios 异常捕获
@try { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate c ...
- 解决ubuntu每次重启屏幕亮度都重置为最高亮度问题
很多朋友都会碰到这个问题,Ubuntu系统,每次通过系统设置修改了屏幕亮度,重启系统都会将屏幕亮度调成最大值,很是苦恼. 上网搜索一番发现,修改屏幕亮度的文件是:/sys/class/backligh ...
- SQL手册
来自 W3School 的 SQL 快速参考.可以打印它,以备日常使用. SQL 语句 语句 语法 AND / OR SELECT column_name(s)FROM table_nameWHERE ...
- OpenCv椭圆皮肤模型
Mat input_image; Mat output_mask; Mat output_image; void main() { VideoCapture cam(); if (!cam.isOpe ...
- java File delete()执行失败原因
java.io.File里的delete操作很实用也很常用,可以用来删除单独的文件和某一目录.但有时候会出现delete失败的情况,出现这种情况的原因一般有以下几种: 1.删除时还有其他程序在使用该文 ...
- 详解 Too many open files
运行在Linux系统上的Java程序可能会出现"Too many open files"的异常情况,且常见于高并发访问文件系统,多线程网络连接等场景. 程序经常访问的文件.sock ...