leetcode 594.最长和谐子序列(滑动窗口)

发布于:2023-09-09 ⋅ 阅读:(88) ⋅ 点赞:(0)

⭐️ 题目描述

在这里插入图片描述


🌟 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] > 1leftright 靠近因为是升序数组,若 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;
    }
};


网站公告

今日签到

点亮在社区的每一天
去签到