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

O(n) সময়ে প্রিফিক্স সাম ব্যবহার করে সর্বোচ্চ সাবঅ্যারে যোগফল C++-এ

সমস্যা বিবরণ

একটি ধনাত্মক ও ঋণাত্মক পূর্ণসংখ্যার অ্যারে দেওয়া আছে। ঐ অ্যারেতে সর্বোচ্চ সাবঅ্যারে যোগফল বের করতে হবে।

উদাহরণ

ইনপুট অ্যারে হলে {-12, -5, 4, -1, -7, 1, 8, -3} আউটপুট হবে 9।

এলগরিদম

  • ইনপুট অ্যারের প্রিফিক্স সাম গণনা করুন।
  • ইনিশিয়ালাইজ করুন: min_prefix_sum = 0, res = -infinity।
  • i = 0 থেকে n-1 পর্যন্ত লুপ চালান (n = অ্যারের আকার)।
    • cand = prefix_sum[i] - min_prefix_sum
    • যদি cand বর্তমান res-এর চেয়ে বড় হয়, তবে res-কে cand দিয়ে আপডেট করুন।
    • যদি prefix_sum[i] বর্তমান min_prefix_sum-এর চেয়ে ছোট হয়, তবে min_prefix_sum-কে prefix_sum[i] দিয়ে আপডেট করুন।
  • res রিটার্ন করুন।

C++ কোড উদাহরণ

#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
  1. C++ ব্যবহার করে ম্যাট্রিক্সে সর্বোচ্চ যোগফল করা কলাম বের করা

  2. C++-এ ডিভাইড অ্যান্ড কঙ্কর ব্যবহার করে मैक्सিমাম সাবঅ্যারে সম বের করা

  3. C++-এ ডিভাইড এন্ড কংকর অ্যালগরিদম দিয়ে সর্বোচ্চ সাবঅ্যারে সম

  4. C++-এ বাইনারি সার্চ পদ্ধতিতে সর্বোচ্চ সাবঅ্যারে যোগফল (Maximum Subarray Sum)