LeetCode 5712. Puede construir el número máximo de valores consecutivos (pensando)

Título:

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

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

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

数据范围:
coins.length == n
1 <= n <= 4 * 1e4
1 <= coins[i] <= 4 * 1e4

solución:

先将a[]从小到大排序,
从左到右遍历,
设当前能构成的最大值为ma,当前数为x,
如果x>ma+1,那么说明ma+1一定不能被构成,答案为ma+1,
如果x<ma+1,那么x可以和前面的[1,ma]组成[1,x+ma],因此可以将ma更新为ma+x.
如果x=ma+1,由于x本身能构成ma+1,又可以和前面的[1,ma]组合,因此可以将ma更新为ma+x.

código:

class Solution {
    
    
public:
    int getMaximumConsecutive(vector<int>& a) {
    
    
        sort(a.begin(),a.end());
        int ma=0;
        for(auto i:a){
    
    
            if(i>ma+1){
    
    
                return ma+1;
            }else{
    
    
                ma+=i;
            }
        }
        return ma+1;
    }
};

Supongo que te gusta

Origin blog.csdn.net/weixin_44178736/article/details/115056375
Recomendado
Clasificación