最优解Leecode 594. 最长和谐子序列——Leecode每日一题系列

Posted 来老铁干了这碗代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最优解Leecode 594. 最长和谐子序列——Leecode每日一题系列相关的知识,希望对你有一定的参考价值。

今天是坚持每日一题打卡的第二十二天


题目链接:https://leetcode-cn.com/problems/longest-harmonious-subsequence/


题解汇总:https://zhanglong.blog.csdn.net/article/details/121071779


题目描述

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

用哈希表做统计判断就好了。


class Solution 
public:
    int findLHS(vector<int>& nums) 
        unordered_map<int, int>um;
        int res = 0;
        for (auto i : nums) um[i]++;
        for (int i = 0; i < nums.size(); ++i) 
            if(um[i-1] != 0) res = max(res, um[i] + um[i-1]);
            if(um[i+1] != 0) res = max(res, um[i] + um[i+1]);
        
        return  res;
    
;

以上是关于最优解Leecode 594. 最长和谐子序列——Leecode每日一题系列的主要内容,如果未能解决你的问题,请参考以下文章

快乐水题594. 最长和谐子序列

leetcode 594最长和谐子序列

594. Longest Harmonious Subsequence 最长的和谐子序列

LeetCode 594. 最长和谐子序列 Longest Harmonious Subsequence (Easy)

594. 最长和谐子序列难度: 一般 / 思维

594. 最长和谐子序列难度: 一般 / 思维