মূল কনটেন্টে যান
🧩
লোকাল DSA
প্যাটার্নটপিক 1 · Arrays & Strings

1.6 Kadane's Algorithm

চিনবেন কীভাবে
"maximum/minimum subarray sum", contiguous, এক পাসে চলমান best — আসলে ১-ভেরিয়েবল DP: "আগেরটা টেনে নেব, না নতুন শুরু করব?"
Demo · approach · কোড — আগে নিজে চেষ্টা, আটকালে খুলুন

Demo: Maximum SubarrayLC 53 (Medium)

Statement (Demo): integer array nums দেওয়া — সবচেয়ে বড় যোগফল সম্পন্ন contiguous subarray খুঁজে বের করুন এবং সেই যোগফল return করুন। উদাহরণ: [-2,1,-3,4,-1,2,1,-5,4]6 | ⚡ n ≤ 10⁵, -10⁴ ≤ nums[i] ≤ 10⁴

Approach: প্রতিটা index-এ সিদ্ধান্ত — আগের চলমান sum positive contribution দিলে যোগ করুন, নাহলে এখান থেকে নতুন subarray শুরু। global best আলাদা রাখুন।

function maxSubArray(nums) {
  let cur = nums[0],
    best = nums[0];
  for (let i = 1; i < nums.length; i++) {
    cur = Math.max(nums[i], cur + nums[i]); // নতুন শুরু vs টেনে নেওয়া
    best = Math.max(best, cur);
  }
  return best;
}

Complexity: Time O(n), Space O(1)

প্রবলেম

  • Maximum Product SubarrayLC 152
    (negative × negative = positive → min-ও ট্র্যাক করুন)

    Statement: integer array nums দেওয়া — সবচেয়ে বড় গুণফল সম্পন্ন contiguous subarray খুঁজে সেই গুণফল return করুন।
    উদাহরণ: [2,3,-2,4]6 ([2,3]) | ⚡ n ≤ 2×10⁴, -10 ≤ nums[i] ≤ 10

    নোট · ফাঁকা