You are given an integer array banned and two integers n and maxSum. You are choosing some number of integers following the below rules:
[1, n].banned.maxSum.Return the maximum number of integers you can choose following the mentioned rules.
Example 1:
Input: banned = [1,6,5], n = 5, maxSum = 6 Output: 2 Explanation: You can choose the integers 2 and 4. 2 and 4 are from the range [1, 5], both did not appear in banned, and their sum is 6, which did not exceed maxSum.
Example 2:
Input: banned = [1,2,3,4,5,6,7], n = 8, maxSum = 1 Output: 0 Explanation: You cannot choose any integer while following the mentioned conditions.
Example 3:
Input: banned = [11], n = 7, maxSum = 50 Output: 7 Explanation: You can choose the integers 1, 2, 3, 4, 5, 6, and 7. They are from the range [1, 7], all did not appear in banned, and their sum is 28, which did not exceed maxSum.
Constraints:
1 <= banned.length <= 1041 <= banned[i], n <= 1041 <= maxSum <= 109class Solution {
public int maxCount(int[] banned, int n, int maxSum) {
Arrays.sort(banned);
int b = 0, blen = banned.length, sum = 0, ct = 0;
for (int i = 1; i <= n && sum <= maxSum; i++) {
while (b < blen && banned[b] < i)
b++;
if (b < blen && banned[b] == i)
continue;
sum += i;
ct++;
}
// System.out.println(sum);
return sum > maxSum ? ct - 1 : ct;
}
}class Solution {
public int maxCount(int[] banned, int n, int maxSum) {
Set<Integer> ban = new HashSet<>();
for(int b: banned)
ban.add(b);
int sum = 0, ct = 0;
for (int i = 1; i <= n && sum <= maxSum; i++) {
if (ban.contains(i))
continue;
sum += i;
ct++;
}
// System.out.println(sum);
return sum > maxSum ? ct - 1 : ct;
}
}