GEEK编程练习— —最长连续序列
来源:互联网 发布:npm node sass 淘宝 编辑:程序博客网 时间:2024/06/07 16:16
题目
给定一个无序的整数数组,返回最长连续序列的长度。要求时间复杂度为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;}
0 0
- GEEK编程练习— —最长连续序列
- GEEK编程练习— —最长回文子序列LPS
- GEEK编程练习— —连续出现最多子串
- GEEK编程练习— —最长相同的子串
- GEEK编程练习— —螺旋矩阵
- GEEK编程练习— —zigzag矩阵
- GEEK编程练习— —字符替换
- GEEK编程练习— —格雷码
- GEEK编程练习— —回文字符串
- GEEK编程练习— —字符串匹配
- GEEK编程练习— —通配符匹配
- GEEK编程练习— —有效数字
- GEEK编程练习— —罗马数字问题
- GEEK编程练习— —计数问题
- GEEK编程练习— —回文构词法
- GEEK编程练习— —反转整数
- GEEK编程练习— —回文整数
- GEEK编程练习— —数组去重
- LintCode: 三数之和
- L2-1. 紧急救援(dijkstra单源最短路径拓展应用)
- 佛祖保佑 永无bug
- Java 值传递和对象传递详解
- POJ 2184 Cow Exhibition
- GEEK编程练习— —最长连续序列
- 如何让UITextField在跳转后直接进入编辑状态
- 第九周项目(2)—我的数组类
- android 利用android:scheme 打不开app或者app打开失败的处理
- Android自定义控件1:自定义topBar
- 【Node.js】使用iconv-lite解决中文乱码 (GB2312)
- 余数和商 两位数乘以一位数
- 中国移动关于WEB应用渗透|Writeup
- 最全面的 Android 编码规范指南