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

发布时间 2023-04-06 22:44:40作者: lxy_cn

题目链接: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;
    }
};