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;
        }
    }
  • 相关阅读:
    窗体1打开窗体2的方法
    C#中窗体间传递数据的几种方法(转载)
    只读字段和常量
    Datepicker控件
    .NET中的加密和解密
    ASP.NET网页生命周期事件
    hdu 1394 Minimum Inversion Number(逆序数对) : 树状数组 O(nlogn)
    我的第一次博客
    弹性布局
    HTML标签部分(块级/行级)
  • 原文地址:https://www.cnblogs.com/yrbbest/p/4438728.html
Copyright © 2011-2022 走看看