
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Construct Target Array with Multiple Sums in C++
Suppose we have an array of integers target. From a starting array A consisting of all 1's, we can perform the following procedure −
Consider x be the sum of all elements currently in our array.
Choose index i, in range 0 to n, where n is the size of the array and set the value of A at index i to x.
We can repeat this procedure as many times as we need.
We have to check whether it is possible to make the target array from A otherwise return False.
So, if the input is like [3,9,5], then the output will be True, as we can start with index [1,1,1], then sum is 3 at index 0, then the array is [3,1,1], then the sum is 5, at index 2, then the array is [3,1,5], then the sum is 9, at index 1, so array is [3,9,5].
To solve this, we will follow these steps −
sum := 0
n := size of target
-
for initialize i := 0, when i < n, update (increase i by 1), do −
sum := sum + target[i]
Define priority queue pq, and initialize it with target array
-
while top element of pq > sum, do −
x := top element of pq
delete element from pq
insert 2 * x - sum into pq
sum := x
return true when sum is same as size of target, otherwise false
Let us see the following implementation to get better understanding −
Example
#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)); }
Input
{3,9,5}
Output
1