力扣刷题——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;
}
还算是简单的,但当时一点都没反应过来,记录一下。

浙公网安备 33010602011771号