1.3 Prefix Sum
Demo · approach · কোড — আগে নিজে চেষ্টা, আটকালে খুলুন
Demo: Subarray Sum Equals K — LC 560 (Medium)
Statement (Demo): integer array nums ও integer k দেওয়া — যোগফল k এমন contiguous subarray-এর মোট সংখ্যা বের করুন। (negative number থাকতে পারে।)
উদাহরণ: nums=[1,1,1], k=2 → 2 | ⚡ 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 indexleftথেকে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
numsওlower,upperদেওয়া — যোগফলlower ≤ sum ≤ upperএমন সব subarray-এর সংখ্যা বের করুন।
উদাহরণ:nums=[-2,5,-1], lower=-2, upper=2→3| ⚡n ≤ 10⁵নোট · ফাঁকা