leetcode 594.最长和谐子序列(滑动窗口)
⭐️ 题目描述
🌟 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;}
};