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])