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

1.3 Prefix Sum

চিনবেন কীভাবে
"subarray sum", range sum query, cumulative, একই array-তে বারবার sum জিজ্ঞেস — precompute O(n), query O(1)
Demo · approach · কোড — আগে নিজে চেষ্টা, আটকালে খুলুন

Demo: Subarray Sum Equals KLC 560 (Medium)

Statement (Demo): integer array nums ও integer k দেওয়া — যোগফল k এমন contiguous subarray-এর মোট সংখ্যা বের করুন। (negative number থাকতে পারে।) উদাহরণ: nums=[1,1,1], k=22 | ⚡ n ≤ 2×10⁴, -1000 ≤ nums[i] ≤ 1000

Approach: চলতে চলতে running prefix sum রাখুন। sum[i..j] = k মানে prefix[j] - prefix[i-1] = k, অর্থাৎ আগে কোথাও prefix - k মানের prefix দেখা গেছে কি না — সেটা hashmap-এ count সহ রাখলেই হয়। (negative number থাকলেও কাজ করে, যেখানে sliding window ব্যর্থ।)

function subarraySum(nums, k) {
  const seen = new Map([[0, 1]]); // খালি prefix
  let sum = 0,
    count = 0;
  for (const x of nums) {
    sum += x;
    count += seen.get(sum - k) || 0;
    seen.set(sum, (seen.get(sum) || 0) + 1);
  }
  return count;
}

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

প্রবলেম

  • Range Sum Query — ImmutableLC 303

    Statement: integer array nums দিয়ে একটা class তৈরি করুন। sumRange(left, right) method index left থেকে right পর্যন্ত সব element-এর যোগফল O(1)-এ return করবে।
    উদাহরণ: nums=[-2,0,3,-5,2,-1], sumRange(0,2)1 | ⚡ n ≤ 10⁴, query ≤ 10⁴

    নোট · ফাঁকা
  • Count of Range SumLC 327
    (Hard — prefix + merge sort/BIT)

    Statement: integer array numslower, upper দেওয়া — যোগফল lower ≤ sum ≤ upper এমন সব subarray-এর সংখ্যা বের করুন।
    উদাহরণ: nums=[-2,5,-1], lower=-2, upper=23 | ⚡ n ≤ 10⁵

    নোট · ফাঁকা