본문 바로가기

Algorithm/Sweeping

(C++) - LeetCode (easy) 643. Maximum Average Subarray I

반응형

https://leetcode.com/problems/maximum-average-subarray-i/description/

 

Maximum Average Subarray I - LeetCode

Can you solve this real interview question? Maximum Average Subarray I - You are given an integer array nums consisting of n elements, and an integer k. Find a contiguous subarray whose length is equal to k that has the maximum average value and return thi

leetcode.com

누적합으로 해결한 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

1. 누적합 vector sum을 num.size()만큼 할당 후 0으로 초기화해 선언해줍니다.2. nums의 원소를 순회하며 sum에 원소를 채워줍니다.

📔 풀이과정

1. sum[4]의 의미는 0 ~ 4번째 원소까지의 누적합이라는 의미입니다. i ~ i + k - 1까지의 누적합은 sum[i] - sum[i-k]로 구할 수 있습니다. 2. sum의 원소들을 순회하며 maxAvg값을 구해줍니다.* n이 10만까지이므로 2차원 for loop로는 시간초과가 납니다. 따라서 for loop 하나로 답을 구해야 합니다.

📔 정답 출력 | 반환

maxAvg를 반환합니다.


📕 Code

📔 C++

class Solution {
public:
    double findMaxAverage(vector<int>& nums, int k) {
        vector <double> sum(nums.size(), 0);
        sum[0] = nums[0];
        
        for(int i = 1; i < nums.size(); i++) {
            sum[i] = sum[i-1] + nums[i];
        }

        double maxAvg = sum[k-1]/k;
        for(int i = k; i < nums.size(); i++) {
            maxAvg = max(maxAvg, (sum[i] - sum[i-k])/k);
        }
        
        return maxAvg;
    }
};

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.