সমস্যা বিবৃতি
ধনাত্মক এবং নেতিবাচক পূর্ণসংখ্যার একটি অ্যারে দেওয়া হলে, সেই অ্যারেতে সর্বাধিক সুবারে যোগফল বের করুন
উদাহরণ
যদি ইনপুট অ্যারে হয় − {-12, -5, 4, -1, -7, 1, 8, -3} তাহলে আউটপুট 9
অ্যালগরিদম
-
ইনপুট অ্যারের উপসর্গ যোগফল গণনা করুন।
-
ইনিশিয়ালাইজ করুন− min_prefix_sum =0, res =-infinite
-
i =0 থেকে n এর জন্য একটি লুপ বজায় রাখুন। (n হল ইনপুট অ্যারের আকার)।
-
cand =prefix_sum[i] – mini
-
যদি ক্যান্ড res এর থেকে বড় (এখন পর্যন্ত সর্বাধিক সাবয়ারের যোগফল), তারপর ক্যান্ড দ্বারা res আপডেট করুন।
-
যদি উপসর্গ_সাম[i] min_prefix_sum (এখন পর্যন্ত ন্যূনতম উপসর্গ যোগফল) থেকে কম হয়, তাহলে উপসর্গ_সম[i] দ্বারা মিন_প্রেফিক্স_সম আপডেট করুন।
-
-
রিটার্ন রিটার্ন
উদাহরণ
#include <bits/stdc++.h> using namespace std; int maximumSumSubarray(int *arr, int n){ int minPrefixSum = 0; int res = numeric_limits<int>::min(); int prefixSum[n]; prefixSum[0] = arr[0]; for (int i = 1; i < n; i++) { prefixSum[i] = prefixSum[i - 1] + arr[i]; } for (int i = 0; i < n; i++) { res = max(res, prefixSum[i] - minPrefixSum); minPrefixSum = min(minPrefixSum, prefixSum[i]); } return res; } int main(){ int arr[] = {-12, -5, 4, -1, -7, 1, 8, -3}; int n = sizeof(arr) / sizeof(arr[0]); cout << "Result = " << maximumSumSubarray(arr, n) <<endl; return 0; }
আউটপুট
যখন আপনি উপরের প্রোগ্রামটি কম্পাইল এবং এক্সিকিউট করবেন। এটি অনুসরণ করে আউটপুট −
তৈরি করেResult = 9