কম্পিউটার টিউটোরিয়াল

সি++-এ K খালি স্লট


মান লিইয়ে নিই Nটি বল্ব একটি সারিয়ে রয়েছে এবং সেগুলো 1 থেকে N পর্যন্ত নম্বর দিয়ে চিহ্নিত। প্রথমে সব বল্ব বন্ধ থাকে। আমরা প্রতিদিন ঠিক একটি বল্ব অন করব যতক্ষণ না N দিন পরে সব বল্ব অন হয়ে যায়। যদি আমাদের bulbs নামক একটি অ্যারে থাকে যার দৈর্ঘ্য N এবং bulbs[i] = x এর অর্থ হল (i+1)তম দিনে আমরা x পজিশনের বল্বটি অন করব। যদি আরেকটি পূর্ণসংখ্যা K থাকে, যাতে দুটি অন করা বল্বের মাঝপথে ঠিক Kটি বন্ধ বল্ব থাকে এমন ন্যূনতম দিন সংখ্যা বের করতে হবে। যদি এমন কোনো দিন না থাকে, তবে -1 ফেরত দিন।

সুতরাং, যদি ইনপুট হয় bulbs: [1,3,2] এবং K = 1, তবে আউটপুট হবে 2 কারণ

  • প্রথম দিনে: bulbs[0] = 1, প্রথম বল্ব অন হয়: [1,0,0]

  • দ্বিতীয় দিনে: bulbs[1] = 3, তৃতীয় বল্ব অন হয়: [1,0,1]

  • তৃতীয় দিনে: bulbs[2] = 2, দ্বিতীয় বল্ব অন হয়: [1,1,1]

আমরা 2 ফেরত দেব কারণ দ্বিতীয় দিনে, দুইটি অন করা বল্বের মাঝপথে একটি বন্ধ বল্ব ছিল।

সমাধান পদ্ধতি

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:

  • n := bulbs-এর আকার
  • i := 0 থেকে आरंभ करें, जब i < n, अपडेट करें (i को 1 से बढ़ाएं), करें:
    • days[bulbs[i] - 1] = i + 1
  • left := 0, right := k + 1, ret := inf
  • i := 0 থেকে आरंभ करें, जब right < n, अपडेट करें (i को 1 से बढ़ाएं), करें:
    • यदि days[i] < days[left] বা days[i] <= days[right], तो:
      • यदि i, right-এর সমান হয়, তবে:
        • ret := ret এবং days[left] ও days[right]-এর সর্বোচ্চের ন্যূনতম
      • left := i
      • right := i + k + 1
  • ফেরত দিন (যদি ret, inf-এর সমান হয়, তবে -1, অন্যথায় ret)

উদাহরণ

বेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:

#include <bits/stdc++.h> using namespace std; class Solution {    public:    int kEmptySlots(vector<int>& bulbs, int k) {       int n = bulbs.size();       vector<int> days(n);       for (int i = 0; i < n; i++) {          days[bulbs[i] - 1] = i + 1;       }       int left = 0;       int right = k + 1;       int ret = INT_MAX;       for (int i = 0; right < n; i++) {          if (days[i] < days[left] || days[i] <= days[right]) {             if (i == right) {                ret = min(ret, max(days[left], days[right]));             }             left = i;             right = i + k + 1;          }       }       return ret == INT_MAX ? -1 : ret;    } }; main(){    Solution ob;    vector<int> v = {1,3,2};    cout << (ob.kEmptySlots(v, 1)); }

इनपुट

{1,3,2},

आउटपुट

2

  1. C++ STL-এ forward_list::front() এবং forward_list::empty()

  2. C++ STL-এ list::empty() ফাংশন

  3. C++-এ isnormal() ফাংশন

  4. C++-এ খালি ক্লাসের অবজেক্টের সাইজ কী?