力扣刷题——3255. 长度为 K 的子数组的能量值 II

一眼就知道是滑动窗口了,但是中间遇上了很多小问题一时没有转过弯来。。。
首先写一个朴素的滑动窗口来尝试一下

vector<int> resultsArray(vector<int> &nums, int k)
{
    if (k == 1)
        return nums;
    int n = nums.size();
    int left = 0, right = 0;
    vector<int> res;
    while (right < n - 1)
    {

        if (nums[right + 1] - 1 == nums[right])
            right++;
        else
        {
            right++;
            while (left != right)
            {
                left++;
            }
        }
        if (right - left + 1 == k)
        {
            res.emplace_back(nums[right]);
            left++;
        }
    }
    return res;
}

这样做会有个问题,会导致没有办法正确的把-1放进答案里,卡了很长时间没有想通。。。后来才发现,原来是可以直接通过left来定位答案的位置的,于是才写出来。。。

vector<int> resultsArray(vector<int> &nums, int k)
{
    if (k == 1)
        return nums;
    int n = nums.size();
    int left = 0, right = 0;
    vector<int> res(n - k + 1, -1);
    while (right < n - 1)
    {

        if (nums[right + 1] - 1 == nums[right])
            right++;
        else
        {
            right++;
            while (left != right)
            {
                left++;
            }
        }
        if (right - left + 1 == k)
        {
            res[left] = nums[right];
            left++;
        }
    }
    return res;
}

还算是简单的,但当时一点都没反应过来,记录一下。

posted @ 2024-11-06 17:27  SuzumiyaYui  阅读(12)  评论(0)    收藏  举报