zoukankan      html  css  js  c++  java
  • LeetCode 最长连续序列

    问题描述:

    给定一个未排序的整数数组,找出最长连续序列的长度。

    要求算法的时间复杂度为 O(n)。

    示例:

    输入: [100, 4, 200, 1, 3, 2]
    输出: 4
    解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/longest-consecutive-sequence

    解题思路:使用一个Map来保存各个候选最长序列的左右边界及其长度,

    依次遍历数组中的每一个元素num,如果map中存在num-1或者num+1,则更新num所处的序列长度及其边界值;

    class Solution {
        public int longestConsecutive(int[] nums) {
            int result = 0;
            Map<Integer, Integer> map = new HashMap<Integer, Integer>();
            for(int num : nums){
                if(!map.containsKey(num)){
                    int left = map.getOrDefault(num-1,0);
                    int right = map.getOrDefault(num+1,0);
                    int len = left + right + 1;
                    result = len > result ? len : result;
                    map.put(num-left, len);
                    map.put(num+right, len);
                    map.put(num, len);
                }
            }
            return result;
        }
    }
  • 相关阅读:
    第十二周总结
    第十一周总结
    第十周总结
    人月神话阅读笔记04
    第九周总结
    第八周总结
    人月神话阅读笔记03
    主成分分析(PCA)算法介绍及matlab实现案例
    Cross-entropy
    压缩算法--TP(1978)
  • 原文地址:https://www.cnblogs.com/lc1475373861/p/12099171.html
Copyright © 2011-2022 走看看