मान लीजिए कि हमारे पास एक सरणी संख्या और एक संख्या है। हम सरणी में तत्व जोड़ सकते हैं, जैसे कि श्रेणी में कोई भी संख्या [1, n] (दोनों समावेशी हैं) सरणी में कुछ तत्वों के योग से बनाई जा सकती है। हमें आवश्यक पैच की न्यूनतम संख्या ज्ञात करनी होगी। तो जब सरणी [1,4] की तरह है और दी गई संख्या n =7 है, तो आउटपुट 1 होगा, क्योंकि शुरू में अंक [1], [4] और [1,4] =5 हैं, अब अगर हम जोड़ते हैं 2 सरणी में, फिर अंक [1], [2], [4], [1,2], [1,4], [2,4], [1,2,4] होंगे, इसलिए योग मान क्रमशः 1, 2, 4, 3, 5, 6, 7 होंगे।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
अनुरोध:=1, मैं:=0, सेवानिवृत्त:=0
-
जबकि अनुरोध <=n, करें -
-
अगर मैं <अंकों और अंकों का आकार [i] <=req, तो,
-
अनुरोध =अनुरोध + अंक[i]
-
1 से बढ़ाएँ
-
-
अन्यथा
-
अनुरोध =अनुरोध + अनुरोध
-
रिट को 1 से बढ़ाएं
-
-
-
वापसी रिट
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int minPatches(vector<int>& nums, int n) {
long long int req = 1;
int i = 0;
int ret = 0;
while(req <= n){
if(i < nums.size() && nums[i] <= req){
req += nums[i];
i++;
} else {
req += req;
ret++;
}
}
return ret;
}
};
main(){
Solution ob;
vector<int> v = {1,4};
cout << (ob.minPatches(v, 7));
} इनपुट
{1,4} आउटपुट
1