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
廣告