Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tổng độ dài lớn nhất của các dãy con không 겹 nhau với k là phần tử lớn nhất trong C++

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