1354. Construct Target Array With Multiple Sums
Question
You are given an array
target
of n integers. From a starting arrayarr
consisting ofn
1’s, you may perform the following procedure :
- let
x
be the sum of all elements currently in your array.- choose index
i
, such that0 <= i < n
and set the value ofarr
at indexi
tox
.- You may repeat this procedure as many times as needed.
Return
true
if it is possible to construct thetarget
array fromarr
, otherwise, returnfalse
.
Solution 1
递归,每次寻找到数组中最大的数字的下标maxIndex,并对整个数组加和。
当数组中出现小于1的数时,不成立,返回false。
当数组加和等于数组长度时,返回true。
记录剩余的数字others,如果没有剩余数字,则返回false。
将target[maxIndex]减去others,因此每次翻倍,快速逼近。
当小于0时,则还原到上一个target[maxIndex]。
递归更改后的数组。
Code
1 | class Solution { |
Solution 2
优先级队列, 大根堆。
每次挤出队列里最大的数字max。
如果max的值为1,则返回true。
计算加和和新的值,并更新sum。
如果最大的数字max小于0,或者剩余的sum小于0,则返回false。
当max仍然大于剩下的数字时,继续做减法。采用因数翻倍,快速接近目标值。
如果max小于0,则恢复到上一个值,并添加到优先级队列中。
Code
1 | class Solution { |
1354. Construct Target Array With Multiple Sums
https://xuanhe95.github.io/2022/06/24/1354-Construct-Target-Array-With-Multiple-Sums/