I was clueless until my boyfriend asked, 'what's the definition of being consecutive'.
Consecutive means it's neighbor must be in the nums. Then the idea is real simple here:
For a unvisited number, let's check the existence of its +1 neighbor and -1 neighbor.
For example, [100,200,4,3,5,2]
when we have 4,
- check +1 neighbor which means 5, then 6, then 7... until no +1 neighbors existed
- check -1 neighbor which means 3, then 2, then 1...until no -1 neighbors existed
def longestConsecutive(self, nums): """ :type nums: List[int] :rtype: int """ if len(nums) == 0: return 0 visited = set() nums = set(nums) result = 1 for n in nums: curRes = 1 if n not in visited: toSmall = toLarge = n # check to larger while(toLarge+1 in nums and toLarge+1 not in visited): visited.add(toLarge+1) toLarge +=1 curRes += 1 # check to smaller while(toSmall-1 in nums and toSmall-1 not in visited): visited.add(toSmall-1) toSmall -=1 curRes += 1 result = max(result,curRes) return result