GEEK编程练习— —最长连续序列
2016-05-12 17:46
246 查看
题目
给定一个无序的整数数组,返回最长连续序列的长度。要求时间复杂度为O(n)。输入
[100, 4, 200, 1, 3, 2, 0, -1]
输出
6
分析
因为要求时间负责度为O(n),所以不能先排序再查找。所以想到查询最快的hash表,记录每个元素是否使用,对每个元素,往左右扩张,直到不连续为止。代码
#include <iostream> #include <unordered_map> #include <algorithm> using namespace std; int main() { vector<int> nums = {100, 4, 200, 1, 3, 2, 0, -1}; unordered_map<int, bool> used; for (auto i : nums) used[i] = false; int longest = 0; for (auto i : nums) { if (used[i]) continue; int length = 1; used[i] = true; for (int j = i + 1; used.find(j) != used.end(); ++j) { used[j] = true; ++length; } for (int j = i - 1; used.find(j) != used.end(); --j) { used[j] = true; ++length; } longest = max(longest, length); } cout << longest << endl; return 0; }
相关文章推荐
- Java 值传递和对象传递详解
- springmvc参数绑定常用注解
- WebSocket不同版本的三种握手方式以及一个Netty实现JAVA类
- eclipse属性配置(背景色字体等)文件的导入导出方法
- spring mvc 实现上传文件进度条
- ubuntu安装myeclipse及破解
- JAVA内存模型
- Java 8 新特性:Java 类库的新特性之日期时间API (Date/Time API )
- C语言文件读写操作总结
- Spring Boot 入门学习(1)
- Mac OS X平台上Java环境的配置
- java用Date类实现倒计时
- 一些java中的官方API的应用场景
- C++与Java比较
- Spring中遇到的错误
- Python基础学习笔记3 - list 和 str 的区别,转化,list解析
- Effective C++学习笔记 chapter 3
- 六角幻方
- java插入排序法例子
- Quartz与Spring的集成