You are given an integer array coins of length n which represents the n coins that you own. The value of the ith coin is coins[i]. You can make some value x if you can choose some of your n coins such that their values sum up to x.

Return the maximum number of consecutive integer values that you can make with your coins starting from and including 0.

Note that you may have multiple coins of the same value.

&nbsp;
Example 1:

Input: coins = [1,3]
Output: 2
Explanation: You can make the following values:
- 0: take []
- 1: take [1]
You can make 2 consecutive integer values starting from 0.

Example 2:

Input: coins = [1,1,1,4]
Output: 8
Explanation: You can make the following values:
- 0: take []
- 1: take [1]
- 2: take [1,1]
- 3: take [1,1,1]
- 4: take [4]
- 5: take [4,1]
- 6: take [4,1,1]
- 7: take [4,1,1,1]
You can make 8 consecutive integer values starting from 0.

Example 3:

Input: nums = [1,4,10,3,1]
Output: 20

&nbsp;
Constraints:


	coins.length == n
	1 &lt;= n &lt;= 4 * 104
	1 &lt;= coins[i] &lt;= 4 * 104


class Solution:
    def getMaximumConsecutive(self, coins: List[int]) -> int:
        coins.sort()
        
        res = 1
        
        for coin in coins:
            if (res >= coin):
                res += coin
        
        return res
class Solution {
    public int getMaximumConsecutive(int[] coins) {
      if(coins.length==0 && coins==null)
          return 0;
      TreeMap<Integer,Integer> map=new TreeMap<Integer,Integer>();
      for(int i:coins)
          map.put(i,map.getOrDefault(i,0)+1);
      int range=0;
      for(int i:map.keySet()){
       if(range==0 && i==1)
       range=i*map.get(i);
       else if(range!=0 && range+1>=i)
         range+=i*map.get(i);
       else 
        break;
      }
     return range+1;
    }
}
class Solution {
public:
    int getMaximumConsecutive(vector<int>& coins) {
        sort(coins.begin(), coins.end());
        int n = coins.size();
        int ans = 1;
        for(int i = 0; i < n; i++) {
            if(coins[i] > ans) return ans;
            ans += coins[i]; 
        }
        return ans;
    }
};
// we iterate from the smallest number while maintaining an integer sum. sum means that we can produce all number from 0 to sum.
// when we can make numbers from 0 to sum, and we encounter a new number, lets say arr[2].
// it is obvious that we can create all numbers from sum to sum + arr[2].
// if there is a gap if(arr[i] > sum+1) it means no combinations could create that number and we stop.
var getMaximumConsecutive = function(coins) {
    coins.sort((a,b) => a-b);
    let sum = 1;
    for(let i = 0; i < coins.length; i++) {
        if(coins[i] <= sum) {
            sum += coins[i];
        } else {
            break;
        }
    }
    return sum;
};
Maximum Number of Consecutive Values You Can Make