ধরুন আমাদের কাছে ফর্মের অন্তর্বর্তীগুলির একটি তালিকা রয়েছে [শুরু, শেষ] এটি ব্যানারগুলির শুরু এবং শেষ পয়েন্টগুলিকে উপস্থাপন করে যা আমরা ঝুলতে চাই৷ একটি ব্যানার ঝুলানোর জন্য কমপক্ষে একটি পিন প্রয়োজন এবং একটি পিন একাধিকবার ব্যানার ঝুলিয়ে দিতে পারে। আমাদের সমস্ত ব্যানার ঝুলানোর জন্য প্রয়োজনীয় ক্ষুদ্রতম সংখ্যক পিনের সন্ধান করতে হবে৷
সুতরাং, যদি ইনপুটটি অন্তরের মত হয় =[[2, 5],[5, 6],[8, 10],[10, 13]], তাহলে আউটপুট হবে 2, যেমন আমরা অবস্থানে দুটি পিন রাখতে পারি। 5 এবং 10 সব ব্যানার টাঙানোর জন্য।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- ব্যবধানের শেষ মানের উপর ভিত্তি করে অ্যারে v সাজান
- ret :=0
- শেষ :=-inf
- প্রতিটি আইটেমের জন্য এটি v −
- যদি শেষ হয়>=এর শুরু, তারপর −
- নিম্নলিখিত অংশ উপেক্ষা করুন, পরবর্তী পুনরাবৃত্তিতে যান
- (রেট 1 দ্বারা বৃদ্ধি করুন)
- শেষ :=এর শেষ
- যদি শেষ হয়>=এর শুরু, তারপর −
- রিটার্ন রিটার্ন
উদাহরণ (C++)
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <bits/stdc++.h> using namespace std; class Solution { public: static bool cmp(vector<int>& a, vector<int>& b) { return a.back() < b.back(); } int solve(vector<vector<int>>& v) { sort(v.begin(), v.end(), cmp); int ret = 0; int last = -1e8; for (auto& it : v) { if (last >= it[0]) { continue; } ret++; last = it[1]; } return ret; } }; int solve(vector<vector<int>>& intervals) { return (new Solution())->solve(intervals); } int main(){ vector<vector<int>> v = {{2, 5},{5, 6},{8, 10},{10, 13}}; cout << solve(v); }
ইনপুট
{{2, 5},{5, 6},{8, 10},{10, 13}}
আউটপুট
2