मान लीजिए हमारे पास people नामक एक ऐरे है। अब i-वें व्यक्ति का वजन people[i] है, और प्रत्येक नाव अधिकतम वजन limit ले जा सकती है। यदि प्रत्येक नाव एक ही समय में अधिकतम 2 लोगों को ले जा सकती है, बशर्ते उन लोगों के वजन का योग अधिकतम limit हो। हमें हर दिए गए व्यक्ति को ले जाने के लिए न्यूनतम नावों की संख्या खोजनी है।
उदाहरण के लिए, यदि इनपुट [3,2,1,2] है और limit 3 है, तो हमें तीन नावों की आवश्यकता होगी: [(1,2), (2), (3)]।
समाधान दृष्टिकोण
people ऐरे को सॉर्ट करें
i := 0, j := n-1, ret := 0
जब तक i ≤ j:
यदि people[i] + people[j] ≤ limit तो i++, j--, अन्यथा j--
ret++
ret लौटाएं
C++ कार्यान्वयन
#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;
}
};
int main(){
vector<int> v = {3,2,1,2};
Solution ob;
cout << (ob.numRescueBoats(v, 3));
return 0;
}
इनपुट
[3,2,1,2] 3
आउटपुट
3