题目
-
给一个数组 banned,给数字 n,给数字 maxSum
-
生成一个正整数的数组,要求满足以下条件
- 取值范围 [1, n]
- 数组元素不可以相等,且不能出现在 banned 数组中
- 数组之和不超过 maxSum
-
返回这个数组的最大长度
思路
- 模拟,用 set 标记 banned 的元素
- 从 1 ~ n 遍历选择数字,直到 sum 超过 maxSum
代码
class Solution {
public:
int maxCount(vector<int>& banned, int n, int maxSum) {
int ans = 0;
set<int> s;
int sum = 0;
for (auto item : banned) {
if (item <= n) s.insert(item);
}
for (int i = 1; i <= n; i++) {
if (s.count(i) > 0) continue;
sum += i;
if (sum > maxSum) break;
ans++;
}
return ans;
}
};