594. 最长和谐子序列(Python)

题目

难度:★☆☆☆☆
类型:数组

和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。

现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度。

示例

输入: [1,3,2,2,5,2,3,7]
输出: 5
原因: 最长的和谐数组是:[3,2,2,2,3].
说明: 输入的数组长度最大不超过20,000.

解答

这道题有一个好处是不需要考虑数组中元素的先后顺序,大大简化了分析流程,我们可以把数组当成一个集合处理。

统计数组中每个元素出现的次数,并存放在字典当中,对于字典中每一条记录,查看某一元素num+1后是否出现在字典中,如果也出现在字典中,则num与num+1可以组成和谐数组,计算所有和谐数组长度的最大值即可。

这里我们使用python中的Counter函数进行元素的快速统计。

class Solution:
    def findLHS(self, nums):
        num_count, res = Counter(nums), 0                           # 统计列表中各个元素出现次数,并初始化结果为零
        for num, count in num_count.items():                        # 考察字典中每一条数字-次数对
            if num+1 in num_count.keys():                           # 如果数字+1也在字典中
                res = max(num_count[num]+num_count[num+1], res)     # 组成和谐数组并统计当前最大长度
        return res

如有疑问或建议,欢迎评论区留言~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容