मान लीजिए कि हमारे पास लोगों नामक एक सरणी है। अब i-वें व्यक्ति के वजन वाले लोग हैं [i], और प्रत्येक नाव अधिकतम भार सीमा तक ले जा सकती है। यदि प्रत्येक नाव में एक ही समय में अधिकतम 2 व्यक्ति सवार हों, बशर्ते उन व्यक्तियों के भार का योग अधिकतम सीमा पर हो। हमें प्रत्येक व्यक्ति को ले जाने के लिए नावों की न्यूनतम संख्या ज्ञात करनी होगी। तो अगर इनपुट [3,2,1,2] जैसा है, और सीमा 3 है, तो हमें तीन नावों की आवश्यकता है। [(1,2), (2), (3)]।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
लोग सरणी को क्रमबद्ध करें
-
मैं:=0, जे:=लोगों की सरणी का आकार – 1, रिट:=0
-
जबकि मैं <=j
-
यदि लोग [i] + लोग [j] <=सीमा, तो i :=i + 1 और j :=j-1, अन्यथा j :=j – 1
-
रिट:=रिट + 1
-
-
वापसी रिट
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using namespace std; class Solution { public: int numRescueBoats(vector<int>& people, int limit) { sort(people.begin(), people.end()); int i = 0; int j = people.size() - 1; int ret = 0; while(i <= j){ if(people[i] + people[j] <= limit){ i++, j--; }else{ j--; } ret++; } return ret; } }; main(){ vector<int> v = {3,2,1,2}; Solution ob; cout << (ob.numRescueBoats(v, 3)); }
इनपुट
[3,2,1,2] 3
आउटपुट
3