Leetcode
[Leetcode] 2090. K Radius Subarray Averages
맑은 눈의 우사미
2023. 6. 21. 06:09
반응형
1. 문제링크
https://leetcode.com/problems/k-radius-subarray-averages
K Radius Subarray Averages - LeetCode
Can you solve this real interview question? 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 elem
leetcode.com
2. 키 포인트
현재 인덱스까지 더한값을 저장하는 배열을 만들고 업데이트한다
nums = [1,2,3,4]라면
sums = [1,3,6,10]가 된다.
vector의 자료형을 int로 하면 overflow가 발생하므로 64-bit integer type으로 한다.
k는 radius(반지름)인데 현재 인덱스를 기준으로 양 옆이 idx-k < 0 이거나 idx+k >= nums.size()가 되는 경우는 값이 -1가 되고그렇지 않은 경우에는 현재 인덱스 값을 idx +- k의 합의 평균으로 업데이트한다.
3. solution
class Solution {
public:
vector<int> getAverages(vector<int>& nums, int k) {
int n = nums.size(), maxLen = k * 2 + 1;
vector<int> v(n, -1);
vector<long long> presum(n, 0);
presum[0] = nums[0];
for(int i = 1; i < n; i++){
presum[i] = nums[i] + presum[i-1];
}
for(int i = k; i < n-k; i++){
long long sum = presum[i+k];
if(i+k+1 > maxLen)
sum -= presum[i-k-1];
v[i] = sum / maxLen;
}
return v;
}
};
반응형