题目
题解
为什么不是动态规划?
- 看着像一道01背包的问题,但是又没给背包容量,给了物品重量求背包容量的范围,和背包问题不符。
- 还有一点是,可以看一下数据范围,背包问题的时间复杂度是O(n*target),所以一般数据范围都不大,而本题coins.length最大可以到 4 ∗ 1 0 4 4*10^4 4∗104,所以排除动态规划。
官解的做法是贪心!
假如可以构造出[0,x]之间的整数,数组中存在y,那么必然也能构造出[y,x+y]之间的整数。此时如果y<=x+1,那么我们就可以构造出[0,x+y]!更新构造区间!
因此我们每次选择数组中的最小值作为y,如果最小值都不能更新[0,x],那么其他元素也不能。
class Solution {
public int getMaximumConsecutive(int[] coins) {
int res=1;//0个整数肯定能构造出0,因此res从1开始
Arrays.sort(coins);
for(int coin:coins){
if(coin>res)
break;
res+=coin;
}
return res;
}
}
时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn),排序的时间复杂度。
空间复杂度: O ( l o g n ) O(logn) O(logn),排序的空间复杂度