程序员面试题目总结--数组(26)【最长连续序列】
来源:互联网 发布:linux squid 启动 编辑:程序博客网 时间:2024/05/01 03:16
26、最长连续序列
题目:给定一个任意整数序列,返回序列中最长连续序列的长度。如[100, 4, 200, 1, 3, 2],最长连续序列为[1,2,3,4],返回长度4。要求时间复杂度为O(n)
分析:如果允许O(n log n) 的复杂度,那么可以先排序,可是本题要求O(n)。由于序列里的元素是无序的,又要求O(n),首先要想到用哈希表。用一个哈希表hash_map<int, bool> used 记录每个元素是否使用,对每个元素,以该元素为中心,往左右扩张,直到不连续为止,记录下最长的长度。
#include<iostream>#include <hash_map>#include <vector>using namespace std;using stdext::hash_map;int longestConsecutive(const vector<int> &num) {hash_map<int, bool> used;for (int i=0;i<num.size();i++) used[num[i]] = false;int longest = 0;for (int i=0;i<num.size();i++){if (used[num[i]]) continue;int length = 1;used[num[i]] = true;for (int j = num[i] + 1; used.find(j) != used.end(); ++j) {used[j] = true;++length;}for (int j = num[i] - 1; used.find(j) != used.end(); --j){used[j] = true;++length;}longest = max(longest, length);}return longest;}注:在vs2008中使用hashmap时,出现错误:error C2065: “hash_map”: 未声明的标识符。
这是因为hash_map目前是vs2008的一个扩展,并没有在标准的c++中。要想使用hash_map,需要using namespace stdext;但是,这很可能产生命名空间冲突,可以加上:using stdext::hash_map.
0 0
- 程序员面试题目总结--数组(26)【最长连续序列】
- 数组中最长连续序列
- 数组中的最长连续序列
- 题目:最长上升连续子序列
- 笔试面试算法经典--最长连续序列
- 数组的最长连续的序列
- 无序数组中最长连续序列
- 数组中的最长连续序列---dp实现
- 数组——数组中最长连续序列
- Longest Consecutive Sequence (最长连续序列) 【面试算法leetcode】
- 程序员面试100题之十二:求数组中最长递增子序列
- 程序员面试100题之十二:求数组中最长递增子序列
- 程序员面试100题之十二:求数组中最长递增子序列
- 程序员面试100题之十二:求数组中最长递增子序列
- 程序员面试题目总结--数组(二)【二分查找、找出给定数字出现次数、两个有序整型数组交集、找出数组中唯一的重复元素、判断数组中的数值是否连续相邻】
- 【面试常见题目之动态规划】连续子序列的最大和(子数组的最大和)
- 【最长连续序列问题】
- 最长连续序列
- 10.jQuery 高级事件
- UINavigationController
- HDU 1020 Encoding
- android学习---AutoCompleteTextView
- Android Scroller类的详细分析
- 程序员面试题目总结--数组(26)【最长连续序列】
- 新手程序员笔记-Spring-全面分析Spring 的编程式事务管理及声明式事务管理【转】
- netty 源码分析二
- 【IOS】保存用户唯一ID
- a.html 与 a.js ,juery 简单练习
- Androidapi.JNI.Net.Wifi
- win7安装mysql5.6
- wikioi 3044 矩形面积求并
- Spring.Net 面向切面AOP