最长和谐子序列

发布于:2023-08-26 ⋅ 阅读:(68) ⋅ 点赞:(0)

题目:

和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 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

代码:

class Solution:
    def findLHS(self, nums) -> int:
        if len(set(nums))==1:
            return 0
        nums.sort()
        ans=0
        d={}
        for i in nums:
            d[i]=d.get(i,0)+1#用字典存储元素出现的次数,避免重复循坏
        key=list(d.keys())
        for i in range(len(key)-1):
            if key[i+1]-key[i]==1:
                ans=max(ans,d[key[i+1]]+d[key[i]])#更新最长和谐子序列的最大值
        return ans


网站公告

今日签到

点亮在社区的每一天
去签到