class Solution:
def maxCount(self, banned: List[int], n: int, maxSum: int) -> int:
n += 1
banned = set(banned)
result, s, i = 0, 0, 1
while i < n:
if i + s > maxSum:
break
if not i in banned:
result += 1
s += i
i += 1
return result
freedom.9
#22
Đầu tháng toàn bài dễ thế nhỉ
Python:
class Solution:
def maxCount(self, banned: List[int], n: int, maxSum: int) -> int:
banned = set(banned)
currentSum = 0
choosen = 0
for i in range(1, n + 1):
if i not in banned:
if currentSum + i > maxSum:
break
choosen += 1
currentSum += i
return choosen
á đù mất mặt tiền rồi
Bài hnay lúc đầu đọc nhầm thành tìm tổng max của 2 số
JavaScript:
function maxCount(banned: number[], n: number, m: number): number {
const set = new Set(banned);
let res = 0, i = 1;
for (let i = 1; i <= n; i++) {
if (set.has(i)) continue;
if (m - i < 0) return res;
m-= i, res++
}
return res;
};
à, do em đọc trên trang lậu nên không chú ý constraint
Phó GOAT
#28
Java:
class Solution {
public int maxCount(int[] banned, int n, int maxSum) {
int ans = 0;
Arrays.sort(banned);
for (int i = 1; i <= n; i++) {
if (binarySearch(banned, i)) continue;
maxSum -= i;
if (maxSum < 0) break;
ans++;
}
return ans;
}
private boolean binarySearch(int[] arr, int k) {
int l = 0, r = arr.length - 1;
while (l <= r) {
int m = l + (r - l) / 2;
if (k == arr[m]) return true;
if (k < arr[m]) r = m - 1;
else l = m + 1;
}
return false;
}
}
Java:
class Solution {
public int maxCount(int[] banned, int n, int maxSum) {
int ans = 0;
Set<Integer> set = new HashSet<>();
for (int ban : banned) set.add(ban);
for (int i = 1; i <= n; i++) {
if (set.contains(i)) continue;
maxSum -= i;
if (maxSum < 0) break;
ans++;
}
return ans;
}
}
Mất mịa nó mặt tiền thớt mới rồi, đành vào ngõ vậy
Tinh Hoa Đông Lào
#29
Yeah 100%
Python:
class Solution:
def maxCount(self, banned: List[int], n: int, maxSum: int) -> int:
curr = 0
res = 0
banned = set(banned)
for i in range(1, n + 1):
if i not in banned:
curr += i
res += 1
if curr > maxSum:
res -= 1
break
return res
thanbaiks
#30
Thread này trả phí à mà được ghim
JavaScript:
var maxCount = function(banned, n, maxSum) {
banned.sort((u, v) => u - v);
let s = 0, ans = 0;
for (let i = 1; i <= n; i++) {
if (s + i <= maxSum && _.sortedIndexOf(banned, i) < 0) {
s += i;
ans++;
}
}
return ans;
};
space dust
#31
Java:
class Solution {
public int maxCount(int[] banned, int n, int maxSum) {
Set<Integer> bannedSet = new HashSet<>();
for (int num : banned) {
bannedSet.add(num);
}
int res = 0;
int sum = 0;
for (int i = 1; i <= n; i++) {
if (bannedSet.contains(i)) {
continue;
}
if (sum + i > maxSum) {
return res;
}
res++;
sum += i;
}
return res;
}
}
Bo_MinhAnh
#32
LC 2554 Java
Java:
class Solution {
public int maxCount(int[] banned, int n, int maxSum) {
int rs = 0, m[] = new int[10001];
for (int e : banned) m[e] = 1;
for (int i = 1; i <= n; i++) if (m[i] == 0 && (maxSum -= i) >= 0) rs++;
return rs;
}
}
á đù mất mặt tiền rồi
Bài hnay lúc đầu đọc nhầm thành tìm tổng max của 2 số
JavaScript:
function maxCount(banned: number[], n: number, m: number): number {
const set = new Set(banned);
let res = 0, i = 1;
for (let i = 1; i <= n; i++) {
if (set.has(i)) continue;
if (m - i < 0) return res;
m-= i, res++
}
return res;
};
e còn đọc nhầm thành tìm maximum sum có thể, ngồi nghĩ 20p xong r đi xem rating có 1100 bảo quái lạ. sao user leetcode làm bài này khủng v
Java:
class Solution {
public int maxCount(int[] banned, int n, int maxSum) {
int ans =0;
int sum =0;
boolean[] arr = new boolean[n+1];
for(int num: banned){
if(num>n)continue;
arr[num]=true;
}
for(int i =1;i<=n;i++){
if(arr[i]) continue;
if(sum+i>maxSum) break;
sum+=i;
ans++;
}
return ans;
}
}
emyeumeonhatF17
#34
Swift:
class Solution {
func maxCount(_ banned: [Int], _ n: Int, _ maxSum: Int) -> Int {
let banned = Set(banned)
var (remain, maxCount) = (maxSum, 0)
for num in 1...n {
if remain < num {
break
}
if !banned.contains(num) {
remain -= num
maxCount += 1
}
}
return maxCount
}
}
talavuavoz113
#35
Java:
class Solution {
public int maxCount(int[] banned, int n, int maxSum) {
int sum = 0;
int count = 0;
Set<Integer> set = new HashSet<>();
for(int i = 0;i<banned.length;i++){
set.add(banned[i]);
}
for(int i = 1;i<=n;i++){
if(!set.contains(i)){
sum += i;
if(sum > maxSum){
break;
}
count++;
}
}
return count;
}
}
Hoàng tử wind
#36
C++:
class Solution {
public:
int maxCount(vector<int>& banned, int n, int maxSum) {
unordered_map<int, bool> umap;
for(int i=0; i<banned.size(); i++){
if(banned[i] <= n) umap[banned[i]] = true;
}
int count = 0;
int sum = 0;
for(int i=1; i <= n ; i++){
if(!umap[i]){
sum += i;
if(sum > maxSum) return count;
count++;
}
}
return count;
}
};
xin lô góc :v
Mắt Xích Yếu
#37
bác nào có premium chạy thử giùm e code này pass dc bài này phần 2 với n<10^9 ko
với m = banned.length;
Java:
class Solution {
public int maxCount(int[] banned, int n, int maxSum) {
Set<Integer> set = new HashSet();
for(int num:banned){
set.add(num);
}
int[] uniq_banned = new int[set.size()];
int index =0;
for(int num:set){
uniq_banned[index++]=num;
}
Arrays.sort(uniq_banned);
int[] prefix_sum = new int[uniq_banned.length];
prefix_sum[0]= uniq_banned[0];
for(int i =1;i<uniq_banned.length;i++){
prefix_sum[i]= prefix_sum[i-1]+uniq_banned[i];
}
int l =1;
int r = n;
int ans =0;
while(l<=r){
int mid = l+(r-l)/2;
int sum = ((mid+1)*mid)/2;
int i=find_boundary(mid, uniq_banned);
if(i!=-1){
sum-=prefix_sum[i];
}
if(sum<=maxSum){
ans =mid-(i+1);
l= mid+1;
}else{
r=mid-1;
}
}
return ans;
}
public int find_boundary(int num, int[] uniq){
int res =-1;
int l=0;
int r = uniq.length-1;
while(l<=r){
int mid = l+(r-l)/2;
if(uniq[mid]<=num){
res =mid;
l=mid+1;
}else{
r=mid-1;
}
}
return res;
}
}
taytrongtayvoinguoita
#38
Swift:
class Solution {
func maxCount(_ banned: [Int], _ n: Int, _ maxSum: Int) -> Int {
let setBanned = Set(banned)
var sum = maxSum
var count = 0
for i in 1...n {
if setBanned.contains(i) {
continue
}
if i <= sum {
count += 1
sum -= i
if sum <= i {
return count
}
}
}
return count
}
}
Cao thủ nào giúp giải thích với
mr.fly1112
#39
Lần đầu góp vui với ae. Gặp ngay bài toán to.
Python:
class Solution:
def maxCount(self, banned: List[int], n: int, maxSum: int) -> int:
numSet = set(banned)
res, curSum = 0, 0
for v in range(1, n+1):
if v in numSet:
continue
curSum += v
if curSum > maxSum:
break
res += 1
return res
class Solution {
func maxCount(_ banned: [Int], _ n: Int, _ maxSum: Int) -> Int {
let setBanned = Set(banned)
var sum = maxSum
var count = 0
for i in 1...n {
if setBanned.contains(i) {
continue
}
if i <= sum {
count += 1
sum -= i
if sum <= i {
return count
}
}
}
return count
}
}
em ko phải cao thủ, nhưng theo 1 ít kn thì để 100% nếu đã có nhiều solutions rồi thì khó
(Khi đã có vài trg hợp hack hoặc "max optimization" đã 100% rồi thì ko được.
Gần đây LC có check gì đó nếu chép sol lần 2, 3 sẽ bị chậm chừng 2 3 ms so với 1st submission).
Còn về impl của bác có đoạn này em hơi nghi ngờ (có thể refactor/optimize)?