মূল কনটেন্টে যান
🧩
লোকাল DSA
প্যাটার্নটপিক 4 · Stacks & Queues

4.4 Sliding Window Maximum (Monotonic Deque)

চিনবেন কীভাবে
"sliding window max/min", "moving maximum" — window সরে আর প্রতিবার max চাই; heap-এ O(n log n), deque-এ O(n)
Demo · approach · কোড — আগে নিজে চেষ্টা, আটকালে খুলুন

Demo: Sliding Window MaximumLC 239 (Hard — Google/Uber High)

Statement (Demo): integer array nums ও integer k দেওয়া — size k-এর প্রতিটা sliding window-এর maximum element বের করুন। উদাহরণ: nums=[1,3,-1,-3,5,3,6,7], k=3[3,3,5,5,6,7] | ⚡ n ≤ 10⁵, -10⁴ ≤ nums[i] ≤ 10⁴

Approach: deque-এ index রাখুন যাতে মানগুলো decreasing থাকে — front সবসময় window-এর max। নতুন এলিমেন্টের চেয়ে ছোট সব পেছন থেকে ফেলে দিন (ওরা আর কখনো max হবে না), আর window-এর বাইরে পড়া front ফেলে দিন।

function maxSlidingWindow(nums, k) {
  const deque = []; // index, মান decreasing
  const res = [];
  for (let i = 0; i < nums.length; i++) {
    if (deque.length && deque[0] <= i - k) deque.shift(); // window-এর বাইরে
    while (deque.length && nums[deque[deque.length - 1]] <= nums[i])
      deque.pop();
    deque.push(i);
    if (i >= k - 1) res.push(nums[deque[0]]);
  }
  return res;
}

Complexity: Time O(n), Space O(k) (নোট: JS-এ shift() O(n) — বড় input-এ head pointer ব্যবহার করুন)

প্রবলেম

    এই প্যাটার্নে আলাদা প্রবলেম নেই — demo-ই মূল প্রবলেম।
    আরও দেখুন
    (demo-ই এই প্যাটার্নের মূল প্রবলেম — heap দিয়ে বিকল্প সমাধানও একবার লিখে দেখুন, দেখুন 6।)