상세 컨텐츠

본문 제목

643. Maximum Average Subarray I

LeetCode

by 10002s 2023. 11. 2. 00:30

본문

Maximum Average Subarray I - LeetCode

길이가 n인 정수 배열 nums와 정수 k가 주어집니다.
길이가 k인 연속적인 부분 배열을 찾아 해당 부분 배열의 평균값이 최대인 값을 반환하세요. 계산 오차가 10^-5 미만인 어떤 답도 허용됩니다.

 

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 this value. Any answer with a calculation error less than 10-5 will be accepted.

 

Example 1:

Input: nums = [1,12,-5,-6,50,3], k = 4
Output: 12.75000
Explanation: Maximum average is (12 - 5 - 6 + 50) / 4 = 51 / 4 = 12.75

Example 2:

Input: nums = [5], k = 1
Output: 5.00000

 

문제 요약:

길이가 k인 연속 부분 배열을 찾아 평균값이 최대인 값을 찾는 문제입니다.

풀이과정:

주어진 배열 nums를 순회하면서 길이가 k인 연속 부분 배열의 평균값을 구해야 합니다. 이를 위해 다음과 같은 절차를 따릅니다:

 

  1. 길이가 k인 연속 부분 배열의 평균값을 구하는 방법은 다음과 같습니다:
    -  처음 k개의 숫자를 합하여 초기 합을 구합니다.
    -  배열을 한 칸씩 오른쪽으로 이동하면서, 새로운 숫자를 더하고 처음 숫자를 빼서 연속 부분 배열의 합을 구합니다. 이때 합을 sum이라고 하면, 평균은 sum / k입니다.
    -  각 연속 부분 배열의 평균을 계산하면서 최대 평균값을 갱신합니다.
  2. 모든 연속 부분 배열에 대한 평균값을 계산하면서 최대 평균값을 찾습니다.
class Solution {
    public double findMaxAverage(int[] nums, int k) {
        int maxSum = Integer.MIN_VALUE;
        
        if(nums.length == 1){
            maxSum = nums[0];
        }else{
            int beforeSum = 0;

            for(int i = 0; i < nums.length; i++){
                beforeSum += nums[i];

                if(i + 1 >= k){
                    maxSum = Math.max(maxSum, beforeSum);
                    beforeSum -= nums[i + 1 - k];
                }
            }
        }
        return (double) maxSum / k;
    }
}
반응형

관련글 더보기