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;
        }
    }
    

      

  • 相关阅读:
    A1052. Linked List Sorting (25)
    A1032. Sharing (25)
    A1022. Digital Library (30)
    A1071. Speech Patterns (25)
    A1054. The Dominant Color (20)
    A1060. Are They Equal (25)
    A1063. Set Similarity (25)
    电子码表
    矩阵键盘
    对象追踪、临时对象追踪、绝对坐标与相对坐标
  • 原文地址:https://www.cnblogs.com/averillzheng/p/3535481.html
Copyright © 2011-2022 走看看