LeetCode in Kotlin

1982. Find Array Given Subset Sums

Hard

You are given an integer n representing the length of an unknown array that you are trying to recover. You are also given an array sums containing the values of all 2n subset sums of the unknown array (in no particular order).

Return the array ans of length n representing the unknown array. If multiple answers exist, return any of them.

An array sub is a subset of an array arr if sub can be obtained from arr by deleting some (possibly zero or all) elements of arr. The sum of the elements in sub is one possible subset sum of arr. The sum of an empty array is considered to be 0.

Note: Test cases are generated such that there will always be at least one correct answer.

Example 1:

Input: n = 3, sums = [-3,-2,-1,0,0,1,2,3]

Output: [1,2,-3]

Explanation: [1,2,-3] is able to achieve the given subset sums:

Note that any permutation of [1,2,-3] and also any permutation of [-1,-2,3] will also be accepted.

Example 2:

Input: n = 2, sums = [0,0,0,0]

Output: [0,0]

Explanation: The only correct answer is [0,0].

Example 3:

Input: n = 4, sums = [0,0,5,5,4,-1,4,9,9,-1,4,3,4,8,3,8]

Output: [0,-1,4,5]

Explanation: [0,-1,4,5] is able to achieve the given subset sums.

Constraints:

Solution

class Solution {
    fun recoverArray(n: Int, sums: IntArray): IntArray {
        sums.sort()
        var m = sums.size
        var zeroShift = 0
        val res = IntArray(n)
        for (i in 0 until n) {
            val diff = sums[1] - sums[0]
            var p = 0
            var k = 0
            var zpos = m
            for (j in 0 until m) {
                if (k < p && sums[k] == sums[j]) {
                    k++
                } else {
                    if (zeroShift == sums[j]) {
                        zpos = p
                    }
                    sums[p++] = sums[j] + diff
                }
            }
            if (zpos >= m / 2) {
                res[i] = -diff
            } else {
                res[i] = diff
                zeroShift += diff
            }
            m /= 2
        }
        return res
    }
}
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy