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.

    [思维问题]:

    以为要用好几个同一种数据结构来实现:其实不用,只要对同一个数自增、自减就可以了。

    [一句话思路]:

    求出up的上限,down的下限后作差、减1

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    1. 如果集合中查有此数,则把它删掉。否则会导致溢出

    [二刷]:

    1. down up要一直变化,所以要用到2个while小循环

    [三刷]:

    [总结]:

    [复杂度]:Time complexity: O(n) Space complexity: O(n)

    [英文数据结构,为什么不用别的数据结构]:

    hashmap:没有k-v的对应关系

     array:找一次down就要for循环,写起来太麻烦

    linkedlist:找一次down就要head-tail循环,写起来太麻烦

    直接用hashset.contains判断存在性,避免了从头到尾地查找

    [其他解法]:

    [Follow Up]:

    [题目变变变]:

    public class Solution {
        /*
         * @param num: A list of integers
         * @return: An integer
         */
        public int longestConsecutive(int[] num) {
            //corner case
            if (num == null || num.length == 0) {
                return 0;
            }
            //add
            HashSet<Integer> set = new HashSet<Integer>();
            for (int i = 0; i < num.length; i++) {
                set.add(num[i]);
            }
            //find
            int max = 0;
            for (int i = 0; i < num.length; i++) {
                int down = num[i] - 1;
                while (set.contains(down)) {
                    set.remove(down);
                    down--;
                }
                
                int up = num[i] + 1;
                while (set.contains(up)) {
                    set.remove(up);
                    up++;
                }
                max = Math.max(max, up - down - 1);
            }
            
            return max;
        }
    }
    View Code
  • 相关阅读:
    REVERSE-Daily(4)-Elfcrackme2
    DES带IV向量加密解密工具
    Reverse-Daily(3)-DotNetCrackMe1
    Reverse-Daily(2)-wow
    C#:using和new关键字
    python3实现UDP协议的简单服务器和客户端
    python3实现TCP协议的简单服务器和客户端
    深入C++的运算符重载
    NLTK学习笔记(五):分类和标注词汇
    NLTK学习笔记(四):自然语言处理的一些算法研究
  • 原文地址:https://www.cnblogs.com/immiao0319/p/8277991.html
Copyright © 2011-2022 走看看