मान लीजिए कि हमारे पास एक सरणी संख्या और एक संख्या है। हम सरणी में तत्व जोड़ सकते हैं, जैसे कि श्रेणी में कोई भी संख्या [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