两数之和
- 原题链接
- 思路
- 代码
原题链接
leet hot 100-3
128. 最长连续序列
思路
可以把所有的数字放到容器里面去 维护一个最大值 每一次去遍历数字 查看但当前数字是否为起始位置(它的前面是否有比它小一位的数字) 如果是起始位置 就记录一下当前值 并把当前值从无序集合里面清除,然后去查看一下当前值+1是否存在 存在的话就继续删除并+1 直到没有下一个值为止 期间维护一个最大值 最后返回时间复杂度O(n) 空间复杂度(n)
代码
class Solution {
public:int longestConsecutive(vector<int>& nums) {unordered_set<int> S;for (auto x: nums) S.insert(x);int res = 0;for (auto x: nums) {//如果存在x而且不存在x的上一位数字if (S.count(x) && !S.count(x - 1)) {int y = x; //让y等于x 用y去遍历unordered_setS.erase(x); //在s中删除x 防止x的下一位继续遍历数组while (S.count(y + 1)) {y ++ ; //只要y的下一位存在 就一直遍历下去S.erase(y); //同时去掉y防止y的下一位进行重复的计数操作}//比较所有结果里面的最大的值res = max(res, y - x + 1);}}return res;}
};