zoukankan      html  css  js  c++  java
  • 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;
        }
    }
    

      

  • 相关阅读:
    java 深入技术三(List)
    java 深入技术二(Collection)
    java开发JDBC连接数据库详解
    数据库基础和JDBC
    java 深入技术一
    java入门 第三季4
    java入门 第三季3
    04-1. 水仙花数(20)
    04-0. 求符合给定条件的整数集(15)
    03-4. 成绩转换(15)
  • 原文地址:https://www.cnblogs.com/averillzheng/p/3535481.html
Copyright © 2011-2022 走看看