let 128 Longest Consecutive Sequence

本文介绍了一种寻找整数数组中最长连续元素序列的算法。该算法利用HashMap来记录每个数字及其连续长度,并通过检测相邻数字来优化计算过程,确保算法复杂度为O(n)。
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.

Your algorithm should run in O(n) complexity.

主题思想:因为是O(n) 复杂度,最开始想到建一个很大的数组,记录出现的数为1,然后查找最大连续为1的长度,但是由于数字可能很大,这种不可行。
但是这种思想大致如此,用HashMap记录一个数字和当前连续的长度,在插入一个数字之前,应该先检测是否能和左右两边联合起来。

很巧妙的思想: 求连续数组的思想:

AC 代码:

class Solution {
    public int longestConsecutive(int[] nums) {

       HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();

        int ans=0;
        for(int n: nums){

            if(!map.containsKey(n)){
                int left=map.getOrDefault(n-1,0);
                int right=map.getOrDefault(n+1,0);

                int sum=left+right+1;
                ans=Math.max(ans,sum);
                map.put(n,sum);
                map.put(n-left,sum);
                map.put(n+right,sum);

            }
        }
        return ans;
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值