已解答
简单
相关标签
相关企业
和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1
。
现在,给你一个整数数组 nums
,请你在所有可能的子序列中找到最长的和谐子序列的长度。
数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。
示例 1:
输入:nums = [1,3,2,2,5,2,3,7] 输出:5 解释:最长的和谐子序列是 [3,2,2,2,3]
示例 2:
输入:nums = [1,2,3,4] 输出:2
示例 3:
输入:nums = [1,1,1,1] 输出:0
提示:
1 <= nums.length <= 2 * 104
-109 <= nums[i] <= 109
思路:
1.先进行排序
2.根据排序后的数组,设置l,r指针,r指针即为for一直在移动的,当满足num[l]+1<num[r]时,说明已经不满足题目所述的和谐数组了,此时应当滑动l指针。不断迭代ans,找出最大的长度即可
class Solution(object):
def findLHS(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if len(set(nums))==1:
return 0
nums1=sorted(nums)
print(nums1)
l=0
ans=0
for r in range(len(nums)):
while nums1[l]+1<nums1[r] and l<r:
l+=1
if nums1[r]-nums1[l]==1:
ans=max(r-l+1,ans)
return ans