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 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告