मान लीजिए हमारे पास लक्ष्य नामक एक पूर्णांक सरणी है। सभी 1 की सरणी A से शुरू करके, हम निम्नलिखित प्रक्रिया कर सकते हैं:
x को सरणी में वर्तमान में सभी तत्वों का योग मानें।
इंडेक्स i चुनें, 0 से n की सीमा में, जहां n सरणी का आकार है और A में इंडेक्स i पर मान को x पर सेट करें।
हम इस प्रक्रिया को जितनी बार चाहें दोहरा सकते हैं।
हमें जांचना है कि क्या A से लक्ष्य सरणी बनाना संभव है, अन्यथा False लौटाएं।
यदि इनपुट [3,9,5] है, तो आउटपुट True होगा, क्योंकि हम [1,1,1] से शुरू कर सकते हैं, फिर योग 3 इंडेक्स 0 पर, सरणी [3,1,1], फिर योग 5 इंडेक्स 2 पर, सरणी [3,1,5], फिर योग 9 इंडेक्स 1 पर, सरणी [3,9,5]।
हल करने के चरण
sum := 0, n := target का आकार
target के सभी तत्वों का योग निकालें
प्राथमिकता कतार pq को target सरणी से आरंभ करें
जब तक pq का शीर्ष तत्व > sum/2 है: x := शीर्ष तत्व, इसे हटाएं, 2*x - sum डालें, sum := x
यदि sum, target के आकार के बराबर है तो true लौटाएं, अन्यथा false
उदाहरण
#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();
}
};
int main() {
Solution ob;
vector<int> v = {3,9,5};
cout << (ob.isPossible(v));
return 0;
}
इनपुट
{3,9,5}
आउटपुट
1