Study/Algorithm
[Leetcode] 643. Maximum Average Subarray I (C++ 풀이)
shan00
2025. 2. 24. 06:09
integer array와 subarray의 길이를 나타내는 k가 인자로 주어졌을 때, array에서 길이 k의 subarray의 최대 평균 값을 반환하자. 슬라이딩 윈도우 기법으로 모든 subarray를 순차탐색하며 최대 평균(or 합)을 계산할 수 있다. 매번 subarray의 평균을 새롭게 계산하는 것이 아니라, 이전 subarray를 캐싱을 해서 연산을 최소화할 수 있다.
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
double cur_sum = 0.0;
double max_sum = 0.0;
for (int i = 0; i < k; i++){
cur_sum += nums[i];
}
max_sum = cur_sum;
for(int i = k; i < nums.size(); i++){
cur_sum = cur_sum - nums[i-k] + nums[i];
if (cur_sum > max_sum)
max_sum = cur_sum;
}
return max_sum / k;
}
};
첫 루프에서 초기 subarray의 합을 계산한다. cur_sum은 sum of subarray가 될 것 이고, max_sum은 지금까지 계산된 최대 부분 합을 저장할 것이다.
마지막에 반환할 때, k로 나눠줌으로써 평균을 쉽게 계산할 수 있겠다.
두번째 루프에서 보면, 다음 차례의 subarray를 계산할 때, 단순히 num[i-k] 값을 빼고, nums[i]를 더해줌으로써, 추가적인 loop없이 새로운 부분합을 계산할 수 있다.
runtime efficiency도 100%를 달성한 것을 볼 수 있다!