# Solution 1
def findLHS(nums: List[int]) -> int:
max_sequence, count = 0, Counter(nums)
k_prec, v_prec = -float("inf"), 0
for k, v in sorted(count.items()):
if k - k_prec == 1:
max_sequence = max(max_sequence, v + v_prec)
k_prec, v_prec = k, v
return(max_sequence)
# Solution 2
def findLHS(self, nums: List[int]) -> int:
nums.sort()
longest_harmonic_sequence = 0
current_sequence_equal_values = 1 # Length of current sequence of equal values
previous_sequence_equal_values = 0 # Length of previous sequence of equal value with diff <= 1
for i in range(1, len(nums)):
# continue current sequence
if nums[i] - nums[i-1] == 0:
current_sequence_equal_values += 1
# new sequence with diff of values = 1
elif nums[i] - nums[i-1] == 1:
previous_sequence_equal_values = current_sequence_equal_values # we store the length of precedent sequence
current_sequence_equal_values = 1
# new sequence with diff of values greater than 1
else:
previous_sequence_equal_values = 0 # reset precedent sequence length
current_sequence_equal_values = 1
# Update only if previous_sequence_equal_values > 0
if previous_sequence_equal_values > 0:
longest_harmonic_sequence = max(longest_harmonic_sequence, previous_sequence_equal_values+current_sequence_equal_values)
return longest_harmonic_sequence