মূল কনটেন্টে যান
🧩
লোকাল DSA
প্যাটার্নটপিক 2 · Binary Search

2.2 Binary Search on Answer

চিনবেন কীভাবে
"minimize the maximum" / "maximize the minimum", "least speed/capacity/days so that...", উত্তরটা একটা range-এ আছে এবং feasibility monotonic (k পারলে k+1-ও পারে)
Demo · approach · কোড — আগে নিজে চেষ্টা, আটকালে খুলুন

Demo: Koko Eating BananasLC 875 (Medium — Amazon/Google High)

Statement (Demo): n পাইল কলা দেওয়া, প্রতি পাইলে piles[i]টা কলা। h ঘণ্টায় সব কলা শেষ করতে হবে। প্রতি ঘণ্টায় একটাই পাইল থেকে সর্বোচ্চ kটা কলা খেতে পারে (পাইল ছোট হলে পুরো পাইলটা শেষ)। সর্বনিম্ন কত k হলে h ঘণ্টার মধ্যে সব শেষ হবে বলুন। উদাহরণ: piles=[3,6,7,11], h=84 | ⚡ n ≤ 10⁴, 1 ≤ piles[i] ≤ 10⁹, n ≤ h ≤ 10⁹

Approach: array-তে না, উত্তরের space-এ search করুন: speed 1 থেকে max(piles)। canFinish(k) monotonic — তাই সবচেয়ে ছোট feasible k বের করতে binary search।

function minEatingSpeed(piles, h) {
  const canFinish = (k) => piles.reduce((t, p) => t + Math.ceil(p / k), 0) <= h;
  let lo = 1,
    hi = Math.max(...piles);
  while (lo < hi) {
    const mid = (lo + hi) >> 1;
    if (canFinish(mid))
      hi = mid; // আরও ছোট speed চেষ্টা
    else lo = mid + 1;
  }
  return lo;
}

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

প্রবলেম

  • Capacity to Ship Packages Within D Daysplan · দিন ০১৬LC 1011

    Statement: একটি conveyor belt-এ weights array অনুযায়ী কিছু প্যাকেজ ক্রমান্বয়ে শিপ করতে হবে। days দিনের মধ্যে বেল্ট থেকে সব প্যাকেজ বন্দরে পাঠাতে বেল্টের ন্যূনতম ধারণক্ষমতা (minimum weight capacity) কত হতে হবে বের করুন। প্যাকেজগুলো ক্রমান্বয়েই পাঠাতে হবে, উল্টাপাল্টা করা যাবে না।
    উদাহরণ: weights = [1,2,3,4,5,6,7,8,9,10], days = 5 → 15 | ⚡ n ≤ 5×10⁴, 1 ≤ days ≤ n, 1 ≤ weights[i] ≤ 500

    নোট · ফাঁকা