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 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.