• 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");
        }
    }
    
  • 相关阅读:
    车辆年检、强险、车船税的关系
    .Net下几种ORM
    Windows 刷新图标命令
    VUE-CLI + AntV G6 兼容IE11
    CentOS 7 下安装 JIRA 8.7 和 Confluence 7.3
    .Net Core,VUE,VS Code,Sql Sugar,Element UI学习笔记
    Nginx 缓存代理
    java对象锁和类锁
    线程的生命周期
    数据库分库分表
  • 原文地址:https://www.cnblogs.com/sunshine-2015/p/7871240.html
Copyright © 2020-2023  润新知