Trong bài toán này, ta được cho một mảng và số nguyên k. Nhiệm vụ: viết chương trình tìm tổng độ dài lớn nhất của các dãy con không 겹 nhau (non-overlapping subarrays) với k là phần tử lớn nhất trong C++.
Mô tả – có mảng và số k. Tìm tất cả dãy con không 겹 nhau có thể tạo từ mảng. Cộng độ dài của tất cả dãy con đó.
Hãy xem ví dụ:
Input – array = {3, 7, 1, 2, 3, 1, 6, 3, 2, 5} k = 3
Output – 7
Giải thích – dãy con không 겹 nhau có max = 3:
{3} : độ dài = 1 {1, 2, 3, 1} : độ dài = 4 {3, 2} : độ dài = 2 Tổng độ dài = 1+4+2 = 7Để giải quyết, ta duyệt mảng, tìm các phần tử ≤ k, giữ độ dài, nếu dãy con có k thì cộng độ dài vào tổng.
Ví dụ
Chương trình minh họa giải pháp:
#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<<"Tổng độ dài lớn nhất của dãy con không 겹 nhau với "<<k<<" là max element là "<<ans; return 0; }Kết quả
Tổng độ dài lớn nhất của dãy con không 겹 nhau với 3 là max element là 7