阿里云做网站经费,wordpress 访客插件,企业网盘怎么下载文件,边城网页设计素材给你一个下标从 0 开始的整数数组 coins#xff0c;表示可用的硬币的面值#xff0c;以及一个整数 target 。
如果存在某个 coins 的子序列总和为 x#xff0c;那么整数 x 就是一个 可取得的金额 。
返回需要添加到数组中的 任意面值 硬币的 最小数量 #xff0c;使范围 …给你一个下标从 0 开始的整数数组 coins表示可用的硬币的面值以及一个整数 target 。
如果存在某个 coins 的子序列总和为 x那么整数 x 就是一个 可取得的金额 。
返回需要添加到数组中的 任意面值 硬币的 最小数量 使范围 [1, target] 内的每个整数都属于 可取得的金额 。
数组的 子序列 是通过删除原始数组的一些可能不删除元素而形成的新的 非空 数组删除过程不会改变剩余元素的相对位置。
示例 1
输入coins [1,4,10], target 19
输出2
解释需要添加面值为 2 和 8 的硬币各一枚得到硬币数组 [1,2,4,8,10] 。
可以证明从 1 到 19 的所有整数都可由数组中的硬币组合得到且需要添加到数组中的硬币数目最小为 2 。示例 2
输入coins [1,4,10,5,7,19], target 19
输出1
解释只需要添加一枚面值为 2 的硬币得到硬币数组 [1,2,4,5,7,10,19] 。
可以证明从 1 到 19 的所有整数都可由数组中的硬币组合得到且需要添加到数组中的硬币数目最小为 1 。
示例 3
输入coins [1,1,1], target 20
输出3
解释
需要添加面值为 4 、8 和 16 的硬币各一枚得到硬币数组 [1,1,1,4,8,16] 。
可以证明从 1 到 20 的所有整数都可由数组中的硬币组合得到且需要添加到数组中的硬币数目最小为 3 。提示
1 target 1051 coins.length 1051 coins[i] target
问题简要描述返回需要添加的硬币的最小数量
细节阐述: s 表示已经构造出了 [0,...,s−1] 内的所有金额。如果 x≤s那么我们可以将上面两个区间合并得到 [0,sx−1] 内的所有金额如果 xs那么我们就需要添加一个面值为 s 的硬币这样可以构造出 [0,2s−1] 内的所有金额然后再考虑 x 和 s 的大小关系其中x coins[i] Java
class Solution {public int minimumAddedCoins(int[] coins, int target) {int ans 0, s 1;Arrays.sort(coins);for (int i 0; s target; ) {if (i coins.length coins[i] s) {s coins[i];} else {ans;s 1;}}return ans;}
} Python3
class Solution:def minimumAddedCoins(self, coins: List[int], target: int) - int:ans i 0s 1coins.sort()while s target: if i len(coins) and coins[i] s:s coins[i]i 1else:s 1ans 1return ans
TypeScript
function minimumAddedCoins(coins: number[], target: number): number {coins.sort((a, b) a - b);let ans 0, s 1;for (let i 0; s target;) {if (i coins.length coins[i] s) {s coins[i];} else {ans;s 1;}}return ans;
};