কম্পিউটার টিউটোরিয়াল

C++-এ দিয়ে गये সামের চেয়ে ছোট বা সমান ম্যাক্সিমাম সাবঅ্যারে সাম


একটি অ্যারে এবং একটি সাম দেওয়া আছে। সাবঅ্যারে যেন দিয়ে गये সামের চেয়ে ছোট বা সমান হয়, এমন সবচেয়ে বড় সাবঅ্যারে সাম বের করতে হবে।

উদাহরণ: array = {3, 5, 1, 8, 2, 9}, sum = 25 -> আউটপুট: 25 (সাবঅ্যারে {5,1,8,2,9})।

সহজ পদ্ধতিতে O(n²) টাইম লাগে। দক্ষ পদ্ধতি: স্লাইডিং উইন্ডো (sliding window)। কারেন্ট সাম ম্যাক্স সামের সাথে তুলনা করে উইন্ডো বাড়িয়ে বা ছোট করে সমাধান করব।

উদাহরণ

#include <iostream>
using namespace std;

int findMax(int a, int b){
    if(a>b) return a;
    return b;
}

int maxSumsubarray(int arr[], int n, int maxSum){
    int sum = arr[0], overallMax = 0, start = 0;
    for (int i = 1; i < n; i++) {
        if (sum <= maxSum)
            overallMax = findMax(overallMax, sum);
        while (sum + arr[i] > maxSum && start < i) {
            sum -= arr[start];
            start++;
        }
        sum += arr[i];
    }
    if (sum <= maxSum)
        overallMax = findMax(overallMax, sum);
    return overallMax;
}

int main(){
    int arr[] = {3, 1, 4, 7, 2, 9, 5};
    int n = sizeof(arr) / sizeof(arr[0]);
    int sum = 20;
    cout << "The maximum sum of subarray with sum less than or equal to " << sum << " is " << maxSumsubarray(arr, n, sum);
    return 0;
}

আউটপুট

The maximum sum of subarray with sum less than or equal to 20 is 18

  1. C++-এ দিয়ে गये সামের চেয়ে ছোট বা সমান ম্যাক্সিমাম সাবঅ্যারে সাম

  2. C++-এ ম্যাক্সিমাম সাবঅ্যারে সাম মডুলো m

  3. দেওয়া অ্যারেকে k বার রিপিট করে তৈরি অ্যারেতে সর্বোচ্চ সাবঅ্যারে যোগফল C++-এ

  4. C++-এ দেওয়া N-এর সমান যোগফল দেয় এমন সর্বোচ্চ প্রাইম সংখ্যা