给你一个长度为 n 的整数数组 coins ,它代表你拥有的 n 个硬币。 第 i 个硬币的值为 coins[i] 。 如果你从这些硬币中选出一部分硬币,它们的和为 x ,那么称,你可以 构造 出 x 。 请返回从 0 开始(包括 0 ),你最多能 构造 出多少个连续整数。 你可能有多个相同值的硬币。 数据范围: coins.length == n 1 <= n <= 4 * 1e4 1 <= coins[i] <= 4 * 1e4
先将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.
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; } };