⭐️ 题目描述

🌟 leetcode链接:最长和谐子序列
思路: 第一步先将数组排序,在使用滑动窗口(同向双指针),定义 left right 下标,比如这一组数 {1,3,2,2,5,2,3,7} 排序后 {1,2,2,2,3,3,5,7} 因为是排序过后的数组所以当前 right 就是当前区间(窗口)的最大值,而 left 就是当前区间(窗口)的最小值,nums[right] - nums[left] == 1 的话就更新当前窗口的长度并 ++right,若 nums[right] - nums[left] > 1 让 left 向 right 靠近因为是升序数组,若 nums[right] - nums[left] < 1 则 ++right。
代码:
class Solution {
public:
int findLHS(vector<int>& nums) {
// 排序
sort(nums.begin() , nums.end());
// 滑动窗口 同向双指针
int left = 0;
int right = 0;
int ans_length = 0;
while (right < nums.size()) {
// 升序数组 left就指向当前窗口的最小值
// right指向的是当前窗口的最大值
if (nums[right] - nums[left] > 1) {
// 差值大于1 让left 向 right 靠近
left++;
} else if (nums[right] - nums[left] < 1) {
// 差值小于1 让right++
right++;
} else {
// 当前窗口的最大值和最小值差是1
// 更新长度
ans_length = max(ans_length , right - left + 1);
right++;
}
}
return ans_length;
}
};









![【java】【项目实战】[外卖九]项目优化(缓存)](https://img-blog.csdnimg.cn/3dd4b4f783c043d0b9a6091f1b91eeb1.png)









