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 ...
随机推荐
- C 文件读写 容易疏忽的一个问题
今天需要解决一个问题,将影像瓦片(一堆jpg文件)分别进行读取,并将所有数据以文件流的方式存入一个.db的文件中, 同时将每个jpg数据在db文件中的位置保存下来,作为index存在.idx文件中. ...
- Android手机的上网功能需要用到APN(网络接入点)的设置 电信
手机apn出问题了,上不网 电信天翼: 我们经常使用的APN有三个,分别是NET网络设置.WAP网络设置和彩信网络设置. 1.NET网络设置 名称:CTNET APN:#777 用户名:ctnet@m ...
- Effective Java 读书笔记之三 类和接口
一.使类和成员的可访问性最小化 1.尽可能地使每个类或者成员不被外界访问. 2.实例域决不能是共有的.包含公有可变域的类不是线程安全的. 3.除了公有静态final域的特殊情形之外,公有类都不应该包含 ...
- Xcode 6制作动态及静态Framework和各种坑
Xcode 6制作动态及静态Framework http://www.cocoachina.com/ios/20141126/10322.html 有没有写SDK或者要将一些常用的工具类做成Frame ...
- git 教程(9)-远程仓库
到目前为止,我们已经掌握了如何在Git仓库里对一个文件进行时光穿梭,你再也不用担心文件备份或者丢失的问题了. 可是有用过集中式版本控制系统SVN的童鞋会站出来说,这些功能在SVN里早就有了,没看出Gi ...
- mysql 数据库字符集的指定
create database mydb default character set utf8 default collate utf8_general_ci;
- xargs命令
xargs命令 常用工具命令 xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具.它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令 ...
- 关于 Tomcat 的线程池的理解
默认配置下,Tomcat 会为每个连接器创建一个绑定的线程池(最大线程数 200).在大多数情况下你不需要改这个配置(除非增大最大线程数以满足高负载需要).但是 Tomcat 喜欢在每个工作者线程的 ...
- 转: UAC 问题
打开VS2005.VS2008.VS2010工程,查看工程文件夹中的Properties文件夹下是否有app.manifest这个文件:如 没有,按如下方式创建:鼠标右击工程在菜单中选择“属性”,点击 ...
- 《oracle每日一练》免安装Oracle客户端使用PL/SQL
免安装Oracle客户端使用PL/SQL Oracle客户端挺招人烦的,部署连接它的应用通常需要先安装它的客户端,安装程序要求在目标机器上写注册表,假设你没有洁癖的话,你仍可能被下面的事情绊住:当你的 ...