1354. Construct Target Array With Multiple Sums

Description

Given an array of integers target. From a starting array, A consisting of all 1's, you may perform the following procedure :

  • let x be the sum of all elements currently in your array.

  • choose index i, such that 0 <= i < target.size and set the value of A at index i to x.

  • You may repeat this procedure as many times as needed.

Return True if it is possible to construct the target array from A otherwise return False.

Constraints

  • N == target.length

  • 1 <= target.length <= 5 * 10^4

  • 1 <= target[i] <= 10^9

Approach

  • GeeksforGeeks

  • ProgramCreek

  • YouTube

Examples

Input: target = [9,3,5]

Output: true

Explanation: Start with [1, 1, 1]

[1, 1, 1], sum = 3 choose index 1

[1, 3, 1], sum = 5 choose index 2

[1, 3, 5], sum = 9 choose index 0

[9, 3, 5] Done

Solutions

/**
 * Time complexity : 
 * Space complexity : 
 */

class Solution {
    public boolean isPossible(int[] target) {
        if(target.length == 1) {
            return target[0] == 1;
        }
        
        PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> b -a);
        
        int sum = 0;
        for(int n: target) {
            sum += n;
            pq.add(n);
        }
        
        while(pq.peek() != 1) {
            int num = pq.poll();
            sum -= num;
            if(sum < 1 || sum >= num) {
                return false;
            }
            num %= sum;
            sum += num;
            pq.add(num);
        }
        
        return true;
    }
}

Follow up

Last updated

Was this helpful?