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.
Solution:
We use a bimap to keep the intervals, implemented with two hashmaps one that starts are mapped to ends and the other one viceversa.class Solution: # @param num, a list of integer # @return an integer def longestConsecutive(self, num): startToEnd = {} endToStart = {} longest = 0 for i in range(0, len(num)): start = num[i] end = num[i] if num[i] in startToEnd: end = startToEnd[num[i]] del startToEnd[num[i]] del endToStart[end] if num[i] in endToStart: start = endToStart[num[i]] del startToEnd[start] del endToStart[num[i]] if num[i]-1 in endToStart: start = min(start, endToStart[num[i]-1]) del startToEnd[endToStart[num[i]-1]] del endToStart[num[i]-1] if num[i]+1 in startToEnd: end = max(end, startToEnd[num[i]+1]) del endToStart[startToEnd[num[i]+1]] del startToEnd[num[i]+1] startToEnd[start] = end endToStart[end] = start longest = max(longest, end-start+1) return longest
No comments :
Post a Comment