1.题目
和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。
现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度。
示例 1:
输入: [1,3,2,2,5,2,3,7]
输出: 5
原因: 最长的和谐数组是:[3,2,2,2,3].
说明: 输入的数组长度最大不超过20,000.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-harmonious-subsequence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.题解
一个循环内,每次添加元素时,检查比当前元素大一或小一的个数中的较大者,加上当前元素的数量更新res。
class Solution
{
public:
int findLHS(vector<int>& nums)
{
unordered_map<int, int>mp;
int res = 0;
for (int i : nums)
{
mp[i]++;
if (mp[i+1]!=0)
res = max(res, mp[i] + mp[i+1]);
if (mp[i-1]!=0)
res = max(res, mp[i] + mp[i-1]);
}
return res;
}
};