정수 배열 Arr[]이 제공됩니다. 목표는 요소의 합이 짝수인 Arr[] 의 가장 긴 길이의 하위 배열을 찾는 것입니다. 즉, 하위 배열의 요소 합은 짝수이고 해당 하위 배열의 길이가 가장 깁니다.
입력 - Arr[] ={ 2,3,5,2,6,7 }.
출력 −하위 배열의 최대 길이 − 4
설명 −최대 길이 하위 배열은 { 5,2,6,7 }입니다. 합은 짝수인 20입니다.
입력 - Arr[] ={ 5,7,7,3,4 }.
출력 − 하위 배열의 최대 길이 − 4
설명 − 최대 길이 하위 배열은 { 5,7,7,3 }입니다. 합은 짝수인 22입니다.
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.
-
정수 배열 Arr[]은 정수를 저장하는 데 사용됩니다.
-
가변 크기는 배열의 길이를 저장하는 데 사용됩니다.
-
함수 Length( int arr[] )는 배열의 합이 짝수인지 확인합니다. Leng은 하위 배열의 길이를 저장하는 데 사용됩니다.
-
배열의 길이가 n이라도 반환되면 배열의 전체 합을 계산합니다.
-
이제 첫 번째 요소에서 시작하여 전체 배열을 순회합니다. 홀수 요소가 발견되면 arr[i]를 제외한 양쪽 절반의 길이를 찾습니다.
-
부분배열의 길이에 대한 최대 길이를 반환합니다.
예시
#include<iostream<
int Length(int arr[], int n){
int sum = 0, leng = 0;
// if whole array is even
for (int i = 0; i < n; i++)
sum += arr[i];
if (sum % 2 == 0) // total sum is already even
return n;
// Find an index i such the a[i] is odd
// and compare length of both halfs excluding
// a[i] to find max length subarray
for (int i = 0; i < n; i++) {
if (arr[i] % 2 == 1)
leng = i>n-i-1?i:n-i-1;
}
return leng;
}
int main(){
int Arr[] = { 1, 2, 6, 2, 4,2 };
int size = 6;
printf("Maximum length of subarray such that sum of the subarray is even: %d",Length(Arr, size));
return 0;
} 출력
위의 코드를 실행하면 다음 출력이 생성됩니다 -
Maximum length of subarray such that sum of the subarray is even : 5