【题目】:2090. 半径为 k 的子数组平均值
class Solution {
public:
vector<int> getAverages(vector<int>& nums, int k) {
vector<int> res(nums.size(), -1);
long curSum = 0; // 记录当前滑窗内的数值和
for(int l = 0, r = 0; r < nums.size(); ++r) {
curSum += nums[r];
if(r - l + 1 == k * 2 + 1) { // 窗口长度满足条件
res[r - k] = curSum / (k * 2 + 1); // 当长度满足时,此时对应的半径中心坐标是:r - k
curSum -= nums[l++]; // 缩小窗口
}
}
return res;
}
};
- 时间复杂度: O(n)
- 空间复杂度: O(1)
标签:平均值,滑窗,nums,curSum,vector,2090,数组,res,半径 From: https://blog.csdn.net/qq_57882997/article/details/145289843半径为 k 的子数组:说明滑窗的长度(r - l + 1)必须要达到2 * k + 1。但是当r下标到达半径中心的时候,还不知道此时数组内元素和,所以可以等到滑窗长度达到条件时,再去反推半径中心。