• leetcode--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.

    code 1:

    public class Solution {
        public int longestConsecutive(int[] num) {
            int max = 0, length = num.length;
    		if(length > 0){
    			Map<Integer, Integer> conSeq = new HashMap<Integer, Integer>();
    			for(int i = 0; i < length; ++i){
    				int left = num[i], right = num[i], len = 1;		
    				if(!conSeq.containsKey(num[i])) {
    				    conSeq.put(num[i], 1);
    				    if(conSeq.containsKey(left - 1) && conSeq.containsKey(right + 1)){
    					    len += (conSeq.get(left - 1) + conSeq.get(right + 1));
    					    left -= conSeq.get(left - 1);
    					    right += conSeq.get(right + 1);
    				    }
    				    else if(conSeq.containsKey(left - 1) && !conSeq.containsKey(right + 1)){
    				        len += conSeq.get(left - 1);
    					    left -= conSeq.get(left - 1);
    				    }
    				    else if (!conSeq.containsKey(left - 1) && conSeq.containsKey(right + 1)){
    					    len += conSeq.get(right + 1);
    					    right += conSeq.get(right + 1);
    				    }
    				    else{
    					    //do nothing
    				    }
    				    max = Math.max(max, len);
    				    conSeq.put(left, len);
    				    conSeq.put(right, len);
    				}
    			}
    		}
    		return max;    
        }
    }
    

      

     code 2:

    public class Solution {
        public int longestConsecutive(int[] num) {
            int length = 0;
    		if(num.length > 0){
    		    length = 1;
    			Map<Integer, Integer> lens = new HashMap<Integer, Integer>();
    			Map<Integer, Integer> visited = new HashMap<Integer, Integer>();
    			for(int i = 0; i < num.length; ++i){
    				lens.put(num[i], 1);
    				visited.put(num[i], 0);
    			}
    			
    			for(int i = 0; i < num.length; ++i){
    				if(visited.get(num[i]) != 0)
    					continue;
    				else{
    					visited.put(num[i], 1);
    					if(lens.containsKey(num[i] - 1)){
    						if(visited.get(num[i] - 1) == 0){
    							int templength = lens.get(num[i] - 1) + lens.get(num[i]);
    							lens.put(num[i], templength);
    							lens.put(num[i] - lens.get(num[i] - 1), templength);
    							length = (length < templength)? templength: length;
    							visited.put(num[i] - 1, 1);
    						}
    					}
    					if(lens.containsKey(num[i] + 1)){
    						int templength = lens.get(num[i] + 1) + lens.get(num[i]);
    						lens.put(num[i] - lens.get(num[i]) + 1, templength);
    						lens.put(num[i] + lens.get(num[i] + 1), templength);
    						length = (length < templength)? templength: length;
    					}					
    				}
    			}
    		}
    		return length;
        }
    }
    

      

  • 相关阅读:
    PHP之防御sql注入攻击的方式
    分享Java开发的利器-Lombok
    Linux最佳的云存储服务分析
    提升PHP编程效率的20个要素
    Java中常见的URL问题及解决方案
    配置CNPM-基础案例
    微软Skype Linux客户端全新发布
    jQuery 3.0最终版发布,十大新特性眼前一亮
    【风马一族_mysql】MySQL免安装版环境配置图文教程
    【风马一族_物理】维度空间的粒子
  • 原文地址:https://www.cnblogs.com/averillzheng/p/3535481.html
Copyright © 2020-2023  润新知