594. 最长和谐子序列
和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 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
思路:
先把数组排序,然后用双指针,找出和谐数组,取最长的和谐数组
就是从前往后一个个找和谐数组
代码
/**
* @param {number[]} nums
* @return {number}
*/
var findLHS = function(nums) {
//排序
nums.sort();
let begin = 0;
let res = 0;
//尾指针
for (let end = 0; end < nums.length; end++) {
// >1就不是和谐数组,所以让begin++
while (nums[end] - nums[begin] > 1) {
begin++;
}
//找出和谐数组
if (nums[end] - nums[begin] === 1) {
//取最大值,end - begin + 1 是和谐数组的长度
res = Math.max(res, end - begin + 1);
}
}
return res;
};
参考: 作者:LeetCode-Solution 链接:https://leetcode-cn.com/problems/longest-harmonious-subsequence/solution/zui-chang-he-xie-zi-xu-lie-by-leetcode-s-8cyr/ 来源:力扣(LeetCode)