Every day a Leetcode
解法1:一次遍历
遍历数组的同时,用一个计数器 cnt 统计连续递增的元素个数:
- 初始化 cnt=0。
- 如果 i=0 或者 nums[i]=nums[i−1]+1,则把 cnt 增加 1。
- 否则,把 cnt 置为 1。
如果 cnt≥k,则更新 ans[i−k+1]=nums[i]。
代码:
/*
* @lc app=leetcode.cn id=3255 lang=cpp
*
* [3255] 长度为 K 的子数组的能量值 II
*/
// @lc code=start
class Solution
{
public:
vector<int> resultsArray(vector<int> &nums, int k)
{
int n = nums.size();
int cnt = 0; // 连续递增的元素个数
vector<int> ans(n - k + 1, -1);
for (int i = 0; i < n; i++)
{
if (i == 0 || nums[i] == nums[i - 1] + 1)
cnt++;
else
cnt = 1;
if (cnt >= k)
ans[i - k + 1] = nums[i];
}
return ans;
}
};
// @lc code=end
结果:
复杂度分析:
时间复杂度:O(n),其中 n 是数组 nums 的长度。
空间复杂度:O(1)。返回值不计入。