力扣 128 最长连续序列

题意:给定一个数组,找出里边的最长连续序列

思路:把数组元素加入Hashset中,然后遍历数组,如果HashSet中有值,那么查看它左右最长连续的序列是否在set中,如果在找出最长的左右序列,并移除在当前序列中的值,根据当前序列长度,更新max

思想:双指针

复杂度:时间O(n),空间O(n)

class Solution {
    public int longestConsecutive(int[] nums) {
        int len = nums.length;
        
        HashSet<Long> set = new HashSet();
        for(int i=0;i<len;i++) {
            set.add((long)nums[i]);
        }
        int max = 0;
        for(int i=0;i<len;i++) {
            if(set.contains((long)nums[i])){
                long temp = (long)nums[i];
                int left = 0;
                while(set.contains(--temp)){
                    set.remove(temp);
                    left++;
                }
                temp = (long)nums[i];
                int right = 0;
                while(set.contains(++temp)){
                    set.remove(temp);
                    right++;
                }
                if(max<right+left+1) {
                    max = right + left + 1;
                }
                set.remove((long)nums[i]);
            }
        }
        
        return max;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容