zoukankan      html  css  js  c++  java
  • [leetcode]Longest Consecutive Sequence

    这道题目一看就去翻答案了,因为以前见过,知道并查集可以用来做分组,但这样的题目真的要并查集么?想想也是HashSet之类就能搞定么。果然是HashMap而不是HashSet。下面这个解法我比较容易理解,刚开始乍看发现对每一个n又要左边遍历右边遍历的,仔细一看对每一段遍历过的数字就标记一下,那么保证每个数字只访问一次,还是O(n)。

    public class Solution {
        public int longestConsecutive(int[] num) {
            HashMap<Integer, Boolean> map = new HashMap<Integer, Boolean>();
            int max = 0;
            for (int n : num)
            {
                map.put(n, false);
            }
            for (int n: num)
            {
                if (!map.get(n))
                {
                    int len1 = getLength(map, n-1, -1);
                    int len2 = getLength(map, n+1, 1);
                    int len = len1 + len2 + 1;
                    if (len > max) max = len;
                }
            }
            return max;
        }
        
        private int getLength(HashMap<Integer, Boolean> map, int n, int step)
        {
            int len = 0;
            while (map.containsKey(n))
            {
                len++;
                map.put(n, true);
                n += step;
            }
            return len;
        }
    }
    

      

  • 相关阅读:
    github使用
    部署flask
    docker部署路飞学城
    centos7安装dnsmasq局域网dns
    消息队列rabbitmq
    记录腾讯云中矿机病毒处理过程(重装系统了fu*k)
    Golang基础
    git协同开发
    gitlab与pycharm结合
    github与gitlab与git三个基佬的故事
  • 原文地址:https://www.cnblogs.com/lautsie/p/3315900.html
Copyright © 2011-2022 走看看