zoukankan      html  css  js  c++  java
  • 128. 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.

    链接:  http://leetcode.com/problems/longest-consecutive-sequence/

    题解:

    把数字加入hashset里,然后向左右查找,同时更新max。

    Time Complexity - O(n), Space Complexity - O(n)

    public class Solution {
        public int longestConsecutive(int[] nums) {
            if(nums == null || nums.length == 0)
                return 0;
            HashSet<Integer> set = new HashSet<>();
            for(int i : nums)
                set.add(i);
            int max = 0;
            
            for(int i = 0; i < nums.length; i++) {
                if(set.contains(nums[i])) {
                    set.remove(nums[i]);
                    int left = nums[i] - 1, right = nums[i] + 1, localMax = 1;
                    
                    while(set.contains(left)) {
                        set.remove(left);
                        left--;
                        localMax++;
                    }
                    while(set.contains(right)) {
                        set.remove(right);
                        right++;
                        localMax++;
                    }
                 max = Math.max(max, localMax);   
                }
            }
                
            return max;
        }
    }

    二刷:

    Java:

    Time Complexity - O(n), Space Complexity - O(n)

    public class Solution {
        public int longestConsecutive(int[] nums) {
            if (nums == null || nums.length == 0) return 0;
            Set<Integer> set = new HashSet<>();
            for (int num : nums) set.add(num);
            int max = 0;
            for (int num : nums) {
                if (set.contains(num)) {
                    int count = 1;
                    set.remove(num);
                    int i = 1;
                    while (set.contains(num - i)) {
                        set.remove(num - i);
                        i++;
                        count++;
                    }
                    i = 1;
                    while (set.contains(num + i)) {
                        set.remove(num + i);
                        i++;
                        count++;
                    }
                    max = Math.max(max, count);
                }
            }
            return max;
        }
    }
  • 相关阅读:
    [USACO13NOV] Pogo-Cow
    《高性能Mysql》讲聚簇索引
    复合索引底层实现
    数据库索引实现(B+,B-,hash)
    B+树,B树,聚集索引,非聚集索引
    MySQL存储引擎
    synchronized实现原理
    【1】线程池的使用
    CompletionService
    原型模式
  • 原文地址:https://www.cnblogs.com/yrbbest/p/4438728.html
Copyright © 2011-2022 走看看