Programming/LeetCode

[Dart] 643. Maximum Average Subarray I

Meezzi 2025. 4. 17. 11:25
728x90

1. 문제

https://leetcode.com/problems/maximum-average-subarray-i/description/?envType=study-plan-v2&envId=leetcode-75

 

 

 

2. 요구사항

1) 정수 배열 nums와 정수 k가 주어진다.

2) nums의 길이가 k인 연속 부분의 배열의 평균값 중 최대값을 찾아 반환한다.

 

 

 

3. 코드

class Solution {
  double findMaxAverage(List<int> nums, int k) {

    // 첫 k개의 요소를 더함
    int sum = 0;
    for (int i = 0; i < k; i++) {
      sum += nums[i];
    }

    // 현재까지의 최대 합을 초기 합으로 설정
    int maxSum = sum;

    // 슬라이딩 윈도우 기법으로 윈도우를 한 칸씩 옮기면서 최대 합 계산
    for (int i = k; i < nums.length; i++) {
      // 윈도우를 오른쪽으로 한 칸 이동:
      // 가장 왼쪽 요소를 빼고, 새로운 오른쪽 요소를 더함
      sum = sum - nums[i - k] + nums[i];

      // 현재 합이 최대 합보다 크면 갱신
      if (maxSum < sum) {
        maxSum = sum;
      }
    }

    // 최대 합을 k로 나눠 평균을 구하고 double로 반환
    return maxSum / k;
  }
}

 

 

728x90