leetcode力扣刷题打卡
题目:2090. 半径为 k 的子数组平均值
描述:给你一个下标从 0 开始的数组 nums ,数组中有 n 个整数,另给你一个整数 k 。
半径为 k 的子数组平均值 是指:nums 中一个以下标 i 为 中心 且 半径 为 k 的子数组中所有元素的平均值,即下标在 i - k 和 i + k 范围(含 i - k 和 i + k)内所有元素的平均值。如果在下标 i 前或后不足 k 个元素,那么 半径为 k 的子数组平均值 是 -1 。
构建并返回一个长度为 n 的数组 avgs ,其中 avgs[i] 是以下标 i 为中心的子数组的 半径为 k 的子数组平均值 。
x 个元素的 平均值 是 x 个元素相加之和除以 x ,此时使用截断式 整数除法 ,即需要去掉结果的小数部分。
思路:
1、固定长度的滑动窗口;
原代码##
class Solution {
public:
vector<int> getAverages(vector<int>& nums, int k) {
int n = nums.size(), j = 2 * k + 1;
long long sum = 0;
vector<int> v(n, -1);
if (n < 2 * k + 1) return v;
for (int i = 0; i < j; ++i) {
sum += nums[i];
}
v[k] = floor(sum / j);
for (int i = k + 1; i < n - k; ++i) {
sum += nums[i + k] - nums[i - k - 1];
//cout << sum << endl;
v[i] = floor(sum / j);
}
return v;
}
};