मान लीजिए कि हमारे पास पूर्णांक लक्ष्य की एक सरणी है। सभी 1 से मिलकर एक प्रारंभिक सरणी A से, हम निम्नलिखित प्रक्रिया कर सकते हैं -
-
विचार करें कि x वर्तमान में हमारे सरणी में सभी तत्वों का योग है।
-
इंडेक्स i चुनें, 0 से n तक, जहां n सरणी का आकार है और इंडेक्स i से x पर A का मान सेट करें।
-
हम इस प्रक्रिया को जितनी बार चाहें उतनी बार दोहरा सकते हैं।
हमें यह जांचना होगा कि क्या ए से लक्ष्य सरणी बनाना संभव है अन्यथा झूठी वापसी करें।
इसलिए, यदि इनपुट [3,9,5] जैसा है, तो आउटपुट ट्रू होगा, जैसा कि हम इंडेक्स [1,1,1] से शुरू कर सकते हैं, फिर इंडेक्स 0 पर योग 3 है, फिर ऐरे [3] है ,1,1], फिर योग 5 है, सूचकांक 2 पर, फिर सरणी [3,1,5] है, फिर योग 9 है, सूचकांक 1 पर, तो सरणी [3,9,5] है।पी>
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
योग :=0
-
n :=लक्ष्य का आकार
-
इनिशियलाइज़ i :=0 के लिए, जब i
-
योग :=योग + लक्ष्य[i]
-
-
प्राथमिकता कतार pq को परिभाषित करें, और इसे लक्ष्य सरणी के साथ प्रारंभ करें
-
जबकि pq का शीर्ष तत्व> योग, करें -
-
x :=pq का शीर्ष अवयव
-
pq से तत्व हटाएं
-
2 * x डालें - pq में योग करें
-
योग :=x
-
-
जब योग लक्ष्य के आकार के समान हो, अन्यथा असत्य हो, तो सही लौटें
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
public:
bool isPossible(vector<int>& target) {
lli sum = 0;
int n = target.size();
for (int i = 0; i < n; i++) {
sum += target[i];
}
priority_queue<int> pq(target.begin(), target.end());
while (pq.top() * 2 > sum) {
int x = pq.top();
pq.pop();
pq.push(2 * x - sum);
sum = x;
}
return sum == (int)target.size();
}
};
main(){
Solution ob;
vector<int> v = {3,9,5};
cout << (ob.isPossible(v));
} इनपुट
{3,9,5} आउटपुट
1