C++中求解k為最大元素的非重疊子陣列長度最大和


在這個問題中,我們給定一個數組和一個整數k。我們的任務是建立一個程式,在C++中找到k作為最大元素的非重疊子陣列長度的最大和。

問題描述 − 在這裡,我們有一個數組和一個整數k。我們必須找到可以從此陣列建立的所有可能的非重疊子陣列。並將所有建立的子陣列的長度相加。

讓我們舉個例子來理解這個問題:

輸入 − array = {3, 7, 1, 2, 3, 1, 6, 3, 2, 5} k = 3

輸出 − 7

解釋 − 最大元素為3的非重疊子陣列

{3} : length = 1
{1, 2, 3, 1} : length = 4
{3, 2} : length = 2
Sum of length = 1+4+2 = 7

為了解決這個問題,我們將遍歷陣列並找到所有小於k的元素,並維護一個長度,如果子陣列(元素流)包含k,則將長度新增到總和。

示例

程式說明了解決方案的工作原理:

 線上演示

#include <iostream>
using namespace std;
int subArrayLengthSum(int arr[], int n, int k){
   int lengthSum = 0;
   int subarrayLength = 0;
   int flag = 0;
   for (int i = 0; i < n;) {
      subarrayLength = 0;
      flag = 0;
      while (arr[i] <= k && i < n) {
         subarrayLength++;
         if (arr[i] == k)
            flag = 1;
         i++;
      }
      if (flag == 1)
      lengthSum += subarrayLength;
      while (arr[i] > k && i < n)
      i++;
   }
   return lengthSum;
}
int main(){
   int arr[] = {3, 7, 1, 2, 3, 1, 6, 3, 2, 5};
   int size = sizeof(arr) / sizeof(arr[0]);
   int k = 3;
   int ans = subArrayLengthSum(arr, size, k);
   cout<<"The max sum of lengths of non-overlapping subarrays with "<<k<<" as max element is "<<ans;
   return 0;
}

輸出

The max sum of lengths of non-overlapping subarrays with 3 as max element is 7

更新於:2020年6月3日

178 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告