题目链接:1798. 你能构造出连续值的最大数目
方法:排序 + 贪心
解题思路
先将 \(coins\) 数组从小到大排序,假设现有 \([0, x]\) 的连续整数序列,此时从 \(coins\) 中选取一个值 \(y\),则可以新构造 \([y, x + y]\) 序列;若 \(x + 1 >= y\),则说明 \([0, x]\) 和 \([y, x + y]\) 可以合并为 \([0, x + y]\) 序列,其中选取 \(y\) 时应该选择 \(coins\) 中未选择的最小值,若最小值不满足条件,则更大的值也不满足。
代码
class Solution {
public:
int getMaximumConsecutive(vector<int>& coins) {
sort(coins.begin(), coins.end());
int x = 0;
for (int i = 0; i < coins.size(); i ++ ) {
if (x + 1 >= coins[i]) x += coins[i];
else break;
}
return x + 1;
}
};