이 문제에서는 양수 값과 음수 값과 정수 k로 구성된 크기 n의 배열 arr[]이 제공됩니다. 우리의 임무는 k 길이의 최대 평균 하위 배열을 찾는 것입니다.
문제를 이해하기 위해 예를 들어 보겠습니다.
입력: arr[] ={4, -1, 5, 6, -2, 4} k =3
출력: 10
설명:
최대 합이 -1, 5, 6 =10인 크기 3의 하위 배열
솔루션 접근 방식
문제에 대한 해결책은 보조 배열 을 사용하여 수행됩니다. 배열의 현재 인덱스까지 누적 합계를 저장합니다.
하위 배열의 합을 찾으려면 하위 배열의 위치 인덱스 간의 차이를 계산해야 합니다.
우리 솔루션의 작동을 설명하는 프로그램,
예시
#include<bits/stdc++.h> using namespace std; int findMaxSubArrayAverage(int arr[], int n, int k) { if (k > n) return -1; int *auxSumArray = new int[n]; auxSumArray[0] = arr[0]; for (int i=1; i<n; i++) auxSumArray[i] = auxSumArray[i-1] + arr[i]; int maxSum = auxSumArray[k-1], subEndIndex = k-1; for (int i=k; i<n; i++) { int sumVal = auxSumArray[i] - auxSumArray[i-k]; if (sumVal > maxSum) { maxSum = sumVal; subEndIndex = i; } } return subEndIndex - k + 1; } int main() { int arr[] = {4, -1, 5, 6, -2, 4}; int k = 3; int n = sizeof(arr)/sizeof(arr[0]); cout<<"The maximum average subarray of length "<<k<<" begins at index "<<findMaxSubArrayAverage(arr, n, k); return 0; }
출력
The maximum average subarray of length 3 begins at index 1