C ++中以k为最大元素的非重叠子数组的最大长度总和
在这个问题中,我们得到一个数组和一个整数k。我们的任务是创建一个程序,该程序将找到不重叠子数组的最大长度总和,其中k为c++中的max元素。
问题描述-这里,我们有一个数组和一个整数k。我们必须找到可以从该数组创建的所有可能的非重叠子数组。并对所有创建的子数组的长度求和。
让我们举个例子来了解这个问题,
输入-数组={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,则将遍历数组并查找所有较小的元素并保持长度,然后将长度加和。
示例
该程序说明了我们解决方案的工作原理,
#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