zoukankan      html  css  js  c++  java
  • 128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列

    给定一个未排序的整数数组,找出最长连续序列的长度。
    例如,
    给出 [100, 4, 200, 1, 3, 2],
    这个最长的连续序列是 [1, 2, 3, 4]。返回所求长度: 4。
    要求你的算法复杂度为 O(n)。
    详见:https://leetcode.com/problems/longest-consecutive-sequence/description/

    Java实现:

    方法一:

    class Solution {
        public int longestConsecutive(int[] nums) {
            int res=0;
            Set<Integer> s=new HashSet<Integer>();
            for(int num:nums){
                s.add(num);
            }
            for(int num:nums){
                if(s.remove(num)){
                    int pre=num-1;
                    int next=num+1;
                    while(s.remove(pre)){
                        --pre;
                    }
                    while(s.remove(next)){
                        ++next;
                    }
                    res=Math.max(res,next-pre-1);
                }
            }
            return res;
        }
    }
    

    方法二:

    class Solution {
        public int longestConsecutive(int[] nums) {
            int res = 0;
            Map<Integer, Integer> m = new HashMap<Integer, Integer>();
            for (int num : nums) {
                if (!m.containsKey(num)){
                    int pre = m.containsKey(num - 1) ? m.get(num - 1) : 0;
                    int next = m.containsKey(num + 1) ? m.get(num + 1) : 0;
                    int sum = pre + next + 1;
                    m.put(num, sum);
                    res = Math.max(res, sum);
                    m.put(num - pre, sum);
                    m.put(num + next, sum);
                }
            }
            return res;
        }
    }

    参考:https://www.cnblogs.com/grandyang/p/4276225.html

  • 相关阅读:
    Cookie
    Servlet请求和响应
    Servlet
    Tomcat
    jQuery
    HTTP协议和ajax
    WebApp制作和正则
    BOM对象和json
    视频和音频
    改变文档结构的方法(5种)
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8723331.html
Copyright © 2011-2022 走看看