zoukankan      html  css  js  c++  java
  • leetcode — longest-consecutive-sequence

    import java.util.HashSet;
    import java.util.Set;
    
    /**
     * Source : https://oj.leetcode.com/problems/longest-consecutive-sequence/
     *
     *
     * 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.
     */
    public class LongestConsecutiveSequence {
    
    
        /**
         * 求出数组中元素能构成连续序列的最大长度
         *
         * 题目中要求是O(n),所以不能使用排序的办法
         * 针对每个元素arr[i]寻找数组中向前、向后有没有能构成连续序列的元素,查找的时候利用hash表
         * 每次记录最大长度,如果找到了就把该元素从hash表中删除,因为该元素不会被再次查找到,所以从hash表中移除
         * 如果hash表为空了,说明所有元素都被查找过,退出循环
         *
         * @param arr
         * @return
         */
        public int findLongestSequence (int[] arr) {
            int max = 0;
            Set<Integer> set = new HashSet<Integer>(arr.length);
            for (int i = 0; i < arr.length; i++) {
                set.add(arr[i]);
            }
    
            for (int i = 0; i < arr.length; i++) {
                int curnum = arr[i] - 1;
                int len = 1;
    
                // 查找curnum左边的数字
                while (set.contains(curnum)) {
                    set.remove(curnum);
                    curnum -= 1;
                    len++;
                }
    
                curnum = arr[i] + 1;
                while (set.contains(curnum)) {
                    set.remove(curnum);
                    curnum += 1;
                    len++;
                }
    
                max = Math.max(max, len);
                if (set.size() <= 0) {
                    return max;
                }
            }
            return max;
        }
    
    
        public static void main(String[] args) {
            LongestConsecutiveSequence longestConsecutiveSequence = new LongestConsecutiveSequence();
            System.out.println(longestConsecutiveSequence.findLongestSequence(new int[]{100, 4, 200, 1, 3, 2}) + "----4");
        }
    }
    
  • 相关阅读:
    【Anagrams】 cpp
    【Count and Say】cpp
    【Roman To Integer】cpp
    【Integer To Roman】cpp
    【Valid Number】cpp
    重构之 实体与引用 逻辑实体 逻辑存在的形式 可引用逻辑实体 不可引用逻辑实体 散弹式修改
    Maven项目聚合 jar包锁定 依赖传递 私服
    Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器
    mysql案例~tcpdump的使用
    tidb架构~本地化安装
  • 原文地址:https://www.cnblogs.com/sunshine-2015/p/7871240.html
Copyright © 2011-2022 走看看