package com.interview.array; import java.util.HashMap; import java.util.Map; /** * Date 12/03/2016 * @author Tushar Roy * * Find longest consecutive subsequence in unsorted array. * * Time complexity O(n) * Space complexity O(n) * * Reference * https://leetcode.com/problems/longest-consecutive-sequence/ */ public class LongestConsecutiveSubsequence { public int longestConsecutive(int[] nums) { Map<Integer, Integer> map = new HashMap<Integer, Integer>(); int result = 1; for (int i : nums) { if (map.containsKey(i)) { continue; } int left = map.containsKey(i - 1) ? map.get(i - 1) : 0; int right = map.containsKey(i + 1) ? map.get(i + 1) : 0; int sum = left + right + 1; map.put(i, sum); result = Math.max(sum, result); map.put(i - left, sum); map.put(i + right, sum); } return result; } public static void main(String args[]) { LongestConsecutiveSubsequence lcs = new LongestConsecutiveSubsequence(); int[] input = {100, 4, 200, 1, 3, 2}; System.out.println(lcs.longestConsecutive(input)); } }