[LeetCode] K Radius Subarray Averages

2090. K Radius Subarray Averages

You are given a 0-indexed array nums of n integers, and an integer k.

The k-radius average for a subarray of nums centered at some index i with the radius k is the average of all elements in nums between the indices i - k and i + k (inclusive). If there are less than k elements before or after the index i, then the k-radius average is -1.

Build and return an array avgs of length n where avgs[i] is the k-radius average for the subarray centered at index i.

The average of x elements is the sum of the x elements divided by x, using integer division. The integer division truncates toward zero, which means losing its fractional part.

  • For example, the average of four elements 2, 3, 1, and 5 is (2 + 3 + 1 + 5) / 4 = 11 / 4 = 2.75, which truncates to 2.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public:
vector<int> getAverages(vector<int>& nums, int k) {
vector<int> res(nums.size(), -1);
long long det = 2 * k + 1;
if(det > nums.size()) return res;
long long prefixSum = accumulate(nums.begin(), nums.begin() + det, 0ll);
res[k] = prefixSum / det;
for(int i = det; i < nums.size(); i++) {
prefixSum += nums[i] - nums[i-det];
res[i-k] = prefixSum / det;
}
return res;
}
};
Author: Song Hayoung
Link: https://songhayoung.github.io/2022/02/10/PS/LeetCode/k-radius-subarray-averages/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.