정수 배열 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