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[] 用于存储整数。

  • 变量 size 用于存储数组的长度。

  • 函数 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

更新于:2020年8月17日

828 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告