QUESTION
easy
题目描述
和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是 1
。
现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度。
示例 1:
输入: [1,3,2,2,5,2,3,7]
输出: 5
原因: 最长的和谐数组是:[3,2,2,2,3].
说明
说明: 输入的数组长度最大不超过 20,000
SOLUTION
先搞清子串和子序列的区别再来做这道题
方法一
用 hash 表来存储每个数字的数量,然后再找到两个差 1 数字之间的数量之和最大的即可
class Solution {
public:
int findLHS(vector<int>& nums) {
unordered_map<int, int> m;
int res = 0;
for(int n : nums) m[n]++;
for(auto it : m){
if(m.count(it.first + 1) != 0) {
int tmp = it.second + m[it.first + 1];
if(tmp > res) res = tmp;
}
}
return res;
}
};