1798. 你能构造出连续值的最大数目

55 阅读1分钟

题目:
给你一个长度为 n 的整数数组 coins ,它代表你拥有的 n 个硬币。第 i 个硬币的值为 coins[i] 。如果你从这些硬币中选出一部分硬币,它们的和为 x ,那么称,你可以 构造 出 x 。

请返回从 0 开始(包括 0 ),你最多能 构造 出多少个连续整数。

你可能有多个相同值的硬币。

算法:

方法一:动态规划
遍历coins,如果当前能构造到x,说明已经能构造出0~x的所有数字,新来一个硬币,日过是x+1,则能新构造出[0+x+1, x+x+1]的所有数字,而如果新来的硬币是x + 2则没法构造出x+1,至此中断构造。
这怎么想到的啊!

func getMaximumConsecutive(coins []int) int {
    ans := 0
    sort.Ints(coins)
    for i := range coins {
        if coins[i] > ans + 1 {
            break
        }
        ans = ans + coins[i]
    }
    return ans + 1
}