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

     方法一:

    class Solution {
        public int longestConsecutive(int[] nums) {
            Set<Integer> set = new HashSet<>();
            for(int num : nums) set.add(num);
            int res = 0;
            for(int num : nums) {
                int sum = 1;
                if(!set.contains(num-1)) {
                    while(set.contains(++num)) {
                        sum++;
                    }
                }
                res = Math.max(res,sum);
            }
            return res;
        }
    }

    方法二:

    • 用哈希表存储每个端点值对应连续区间的长度
    • 若数已在哈希表中:跳过不做处理
    • 若是新数加入:
      • 取出其左右相邻数已有的连续区间长度 left 和 right
      • 计算当前数的区间长度为:cur_length = left + right + 1
      • 根据 cur_length 更新最大长度 max_length 的值
      • 更新区间两端点的长度值
    class Solution {
        public int longestConsecutive(int[] nums) {
            int n = nums.length;
            Map<Integer,Integer> map = new HashMap<>();
            int res = 0;
            for(int num : nums) {
                if(!map.containsKey(num)) {
                    int l = map.getOrDefault(num-1,0);
                    int r = map.getOrDefault(num+1,0);
                    int len = l + r + 1;
                    res = Math.max(res,len);
                    map.put(num,-1); // 随便放一个值,表示已访问过
                    map.put(num-l,len);
                    map.put(num+r,len);
                }
            }
            return res;
        }
    }
  • 相关阅读:
    linux的crash之hardlock排查记录
    linux 巨页使用测试
    linux 巨页使用测试以及勘误1
    python判断两个list包含关系
    JavaScript--数据结构之栈
    JavaScript--数据结构与算法之列表
    js数组详解:
    基于jQuery的插件开发
    函数的理解:
    JS面向对象:
  • 原文地址:https://www.cnblogs.com/yonezu/p/13297943.html
Copyright © 2011-2022 走看看