Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 하위 배열의 합이 짝수인 하위 배열의 최대 길이

<시간/>

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