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

সি++-এ কর্মচারীদের ফ্রি টাইম


ধরা যাক কর্মচারীদের একটি শিডিউল লিস্ট দেওয়া আছে; এটি প্রতিটি কর্মচারীর কাজের 시간을 রিপ্রেজেন্ট করে। এখন ধরা যাক প্রতিটি কর্মচারীর নন-ওভারল্যাপিং ইন্টারভালের একটি লিস্ট আছে, এই ইন্টারভালগুলো সর্টেড। আমাদের সব কর্মচারীদের জন্য কমন, পজিটিভ-দৈর্ঘ্যের ফ্রি টাইম রিপ্রেজেন্ট করার ফিনাইট ইন্টারভালের লিস্ট খুঁজে বের করতে হবে, এবং সেটিও সর্টেড অর্ডারে। আমরা ইন্টারভালগুলোক [x, y] ফর্মে রিপ্রেজেন্ট করছি, উদাহরণস্বরূপ, schedule[0][0].start = 1, schedule[0][0].end = 2।

তাই, যদি ইনপুট schedule = [[[1,2],[5,6]],[[1,3]],[[4,10]]] হয়, তবে আউটপুটের একটি হবে [[3,4]]।

এটি সমাধান করতে, আমরা নিচের ধাপগুলো অনুসরণ করব -

  • একটি 2D অ্যারে v ডিফাইন করুন

  • i := 0 থেকে শুরু করুন, যখন i < schedule-এর আকার, (i ১ করে বাড়ান), করুন

    • j := 0 থেকে শুরু করুন, যখন j < schedule[i]-এর আকার, (j ১ করে বাড়ান), করুন

      • schedule[i, j] v-এর শেষে ইনসার্ট করুন

  • অ্যারে v সর্ট করুন

  • একটি 2D অ্যারে ret ডিফাইন করুন

  • একটি অ্যারে temp := v[0] ডিফাইন করুন

  • i := 0 থেকে শুরু করুন, যখন i < v-এর আকার, (i ১ করে বাড়ান), করুন -

    • যদি temp[0] < v[i, 1], তবে -

      • {temp[1], v[i, 0]} ret-এর শেষে ইনসার্ট করুন

      • temp := v[i]

    • অন্যথায়

      • temp := (যদি temp[1] < v[i, 1], তবে v[i], অন্যথায় temp)

  • ret রিটার্ন করুন

বेहतर বোঝার জন্য নিচের বাস্তবায়নটি দেখুন -

উদাহরণ

#include <bits/stdc++.h> using namespace std; void print_vector(vector<vector<auto> > v){    cout << "[";    for(int i = 0; i<v.size(); i++){       cout << "[";       for(int j = 0; j <v[i].size(); j++){          cout << v[i][j] << ", ";       }       cout << "],";    }    cout << "]"<<endl; } class Solution {    public:    static bool cmp(vector<int> a, vector<int> b){       return a[0] < b[0];    }    vector<vector<int>> employeeFreeTime(vector<vector<vector<int>>> schedule) {       vector<vector<int>> v;       for (int i = 0; i < schedule.size(); i++) {          for (int j = 0; j < schedule[i].size(); j++) {             v.push_back(schedule[i][j]);          }       }       sort(v.begin(), v.end(), cmp);       vector<vector<int>> ret;       vector<int> temp = v[0];       for (int i = 0; i < v.size(); i++) {          if (temp[0] < v[i][1]) {             ret.push_back({temp[1], v[i][0]});             temp = v[i];          } else {             temp = temp[1] < v[i][1] ? v[i] : temp;          }       }       return ret;    } }; main(){    Solution ob;    vector<vector<vector<int>>> v = {{{1,2},{5,6}},{{1,3}},{{4,10}}};    print_vector(ob.employeeFreeTime(v)); }

ইনপুট

{{{1,2},{5,6}},{{1,3}},{{4,10}}}

আউটপুট

[[2, 1, ],[2, 1, ],[3, 4, ],[10, 5, ],]

  1. C++-এ Flatten 2D Vector: ২D ভেক্টরকে ফ্ল্যাটেন করে ইটারেটর বানানো

  2. নেক্সট ক্লোজেস্ট টাইম খুঁজে বের করা C++-এ

  3. C++-এ уникаল ভগ্নাংশ: সরলীকরণ, ডুপ্লিকেট মুছে সর্টিং

  4. সি/সি++-এ বারkeley-এর অ্যালগরিদম