LeetCode:Longest Consecutive Sequence

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.

时间复杂度要求o(n)  不能用排序 就用map来记录元素,然后顺序扫描一遍元素,对每个未使用的元素左右扩张。

 1 class Solution {
 2 public:
 3     int longestConsecutive(vector<int>& nums) {
 4         unordered_map<int,bool> used;
 5     
 6     for(auto i:nums) used[i]=false;
 7     
 8     int longest=0;
 9     
10     for(auto i:nums)
11     {
12         if(used[i]) continue;
13         
14         int length=1;
15         used[i]=true;
16         
17         //向增长的方向开始 
18         
19         for(int j=i+1;used.find(j)!=used.end();j++)
20         {
21           length++;
22           used[j]=true;
23          }
24         
25         //向减少的方向开始
26         for(int j=i-1;used.find(j)!=used.end();j--)
27         {
28           length++;
29           used[j]=true;
30          }
31          
32         longest=max(longest,length); 
33   
34     }
35     
36     return longest;
37     }
38 };

 

转载于:https://www.cnblogs.com/xiaoying1245970347/p/4816734.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值