LeetCode Longest consecutive subsquence

参考资料:左程云算法课
128. Longest Consecutive Sequence
Given an unsorted array of integers nums, return the length of the longest consecutive elements sequence.

You must write an algorithm that runs in O(n) time.

Example 1:

Input: nums = [100,4,200,1,3,2]
Output: 4
Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.

思路:
建立一个map,其key是num值(来自于给定数组),value是其所在连续区间的长度(如<100,1>,则说明目前只有100自己构成连续区间)。
遍历数组,忽略掉那些曾经进过map的数;只有新数i才被放进map中,其值先设为1(他自己作为区间,长度本身就是1;另外,也可起到去重的作用,后来的点如果=i,自动被忽略);然后检查map.containsKey(i-1)看新数能不能接上自己左边的连续区间(如果有的话),再检查map.containsKey(i+1)看新数能不能接上自己右边的连续区间(如果有的话)。然后,对于 由于新数的到来而被延长的连续区间,我们只更新该区间的头尾点在map中的记录,因为后来的点如果落在这个区间内,对“延长区间”这件事毫无帮助。

 public int longestConsecutive(int[] nums)
     {
         HashMap<Integer,Integer> map = new HashMap<>();// <position,lenInterval>
         int len=0;
       
        for(int i:nums)
        {
            if(!map.containsKey(i))
            {
                map.put(i,1);
                int left=map.containsKey(i-1)?map.get(i-1):0;
                int right=map.containsKey(i+1)?map.get(i+1):0;

                map.put(i-1-left+1,left+right+1);
                map.put(i+1+right-1,left+right+1);
                len = Math.max(len,left+right+1);
            }
        }
        return len;
     }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值