leetcode-1354-Construct Target Array With Multiple Sums
问题
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 that0 <= i < target.size
and set the value ofA
at indexi
tox
. - 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.
Example 1:
1 | Input: target = [9,3,5] |
Example 2:
1 | Input: target = [1,1,1,2] |
Example 3:
1 | Input: target = [8,5] |
Constraints:
N == target.length
1 <= target.length <= 5 * 10^4
1 <= target[i] <= 10^9
分析
分析可知问题输入的数组,数之间的顺序关系是无所谓的,[9,3,5]
和 [3,5,9]
的最终答案是一样的,并且每个目标数组的前一个状态的数组是确定的。一个数组的最后一步发生的变化一定是发生在了最大那个数字上。比如 [9,3,5]
最后一步发生的变化一定发生在了 9
上,因为要指定一个数变成整个数组的和,所以变化的位置变化之后一定存储的是数组中最大的那个数。于是我们可以从目标数递推判断是否可以变成全1的数组。如:[9,3,5] -> [1,3,5] -> [1,3,1] -> [1,1,1]
。使用优先队列来维护数组中最大值的信息。
代码
1 | class Solution { |
Author: Hatton.Liu
Link: http://hattonl.github.io/2020/02/16/leetcode-1354/
License: 知识共享署名-非商业性使用 4.0 国际许可协议