[leetcode]: 594. Longest Harmonious Subsequence

本文介绍了一种算法,用于寻找给定整数数组中最长的和谐子序列,和谐子序列定义为数组内最大元素和最小元素的差刚好为1。通过统计数组中每个元素的出现次数,并计算相邻大小元素的个数之和,最终找到最长和谐子序列的长度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.题目

We define a harmonious array is an array where the difference between its maximum value and its minimum value is exactly 1.
Now, given an integer array, you need to find the length of its longest harmonious subsequence among all its possible subsequences.
定义和谐数组为数组内最大元素和最小元素的差刚好为1
给一个整数数组,求最长和谐子序列的长度。
Example 1:
Input: [1,3,2,2,5,2,3,7]
Output: 5
Explanation: The longest harmonious subsequence is [3,2,2,2,3].

2.分析

对数组中每个元素计数,统计相邻大小元素的个数之和,返回最大的值。
实现方法:
c++ 借助map, map默认按key值大小升序排列
python 借助Counter

3.代码

c++

int findLHS(vector<int>& nums) {
    map<int, int> counts;
    for (int n : nums)
        counts[n]++;
    int maxc = 0;
    int preV = 0;
    int preC = 0;
    for (auto p : counts) {
        if (preC&&preV + 1 == p.first)
            maxc = preC + p.second > maxc ? preC + p.second : maxc;
        preC = p.second;
        preV = p.first;
    }
    return maxc;
}

python

def findLHS(self, nums):
    counts=collections.Counter(nums)
    return max([counts[i]+counts[i+1] for i in counts if counts[i+1]] or [0])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值