मान लीजिए कि हम बच्चों को कुछ कुकीज़ वितरित करने का प्रयास कर रहे हैं। लेकिन, हमें प्रत्येक बच्चे को अधिक से अधिक एक कुकी देनी चाहिए। अब प्रत्येक बच्चे के पास एक लालच कारक जीआई है, जो एक कुकी का न्यूनतम आकार है जिससे बच्चा संतुष्ट होगा; और प्रत्येक कुकी जे का आकार एसजे होता है। जब sj>=gi, हम बच्चे i को कुकी j असाइन कर सकते हैं, और बच्चा i संतुष्ट होगा। हमारा लक्ष्य बच्चों की सामग्री की संख्या को अधिकतम करना और अधिकतम संख्या में आउटपुट देना है।
इसलिए, यदि इनपुट [1,2], [1,2,3] जैसा है, तो आउटपुट 2 होगा, 2 बच्चे और 3 कुकीज़ हैं। 2 बच्चों के लालच कारक 1, 2 हैं। अब हमारे पास 3 कुकीज़ हैं और उनके आकार सभी बच्चों को संतुष्ट करने के लिए काफी बड़े हैं, इसलिए आउटपुट 2 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
सरणी छ सॉर्ट करें जी
-
सरणी को क्रमबद्ध करें
-
मैं :=0, जे =0
-
जबकि (i <आकार का g और j <आकार का s), करते हैं -
-
अगर g[i] <=s[j], तो -
-
(i 1 से बढ़ाएँ)
-
-
(जम्मू को 1 से बढ़ाएं)
-
-
वापसी मैं
उदाहरण
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; class Solution { public: int findContentChildren(vector<int>& g, vector<int>& s) { sort(g.begin(), g.end()); sort(s.begin(), s.end()); int i = 0, j = 0; while (i < g.size() && j < s.size()) { if (g[i] <= s[j]) i++; j++; } return i; } }; main(){ Solution ob; vector<int> v = {1,2}, v1 = {1,2,3}; cout << (ob.findContentChildren(v, v1)); }
इनपुट
{1,2}, {1,2,3}
आउटपुट
2