leetcodeSolution to some Leetcode problems written in C++ |
git clone git://git.dimitrijedobrota.com/leetcode.git |
Log | Files | Refs | README | LICENSE | |
commit | 9212a087df08586dd7c8c525297ad0271cbe2087 |
parent | c7a3c05c4531c60d82027c7f995e5651c93d86f8 |
author | Dimitrije Dobrota <mail@dimitrijedobrota.com> |
date | Wed, 4 Dec 2024 14:44:42 +0100 |
1 Random Problem
Diffstat:A | Problems/0698.cpp | | | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
M | README.md | | | + |
2 files changed, 73 insertions(+), 0 deletions(-)
diff --git a/Problems/0698.cpp b/Problems/0698.cpp
@@ -0,0 +1,72 @@
class Solution {
public:
bool canPartitionKSubsets(vector<int> &nums, int k) const {
int acc = 0;
for (const int n : nums)
acc += n;
if (acc % k) return false;
const int goal = acc / k;
sort(rbegin(nums), rend(nums));
if (nums[0] > goal) return false;
const function<bool(uint16_t, int, int, int)> rec = [&](uint16_t visited, int left, int sum,
int start) {
if (sum == goal) left--, sum = 0, start = 0;
if (left == 1) return true;
for (int i = start; i < size(nums); i++) {
const uint16_t mask = 1 << i;
if (visited & mask) continue;
if (sum + nums[i] > goal) continue;
if (rec(visited | mask, left, sum + nums[i], i + 1)) return true;
if (sum == 0) return false;
}
return false;
};
return rec(1, k, nums[0], 1);
}
};
class Solution {
public:
bool canPartitionKSubsets(vector<int> &nums, int k) const {
static int acc[16];
int sum = 0;
for (const int n : nums)
sum += n;
if (sum % k) return false;
const int goal = sum / k;
sort(rbegin(nums), rend(nums));
if (nums[0] > goal) return false;
memset(acc, 0x00, sizeof(acc));
acc[0] = nums[0];
function<bool(int)> rec = [&](int crnt) {
if (crnt == size(nums)) return true;
for (int i = 0; i < k; i++) {
if (acc[i] + nums[crnt] > goal) continue;
acc[i] += nums[crnt];
if (rec(crnt + 1)) return true;
acc[i] -= nums[crnt];
if (acc[i] == 0) return false;
}
return false;
};
return rec(1);
}
};
diff --git a/README.md b/README.md
@@ -535,6 +535,7 @@ reference and a base for solving problems.
| 0690 | Medium | [Employee Importance](Problems/0690.cpp) |
| 0692 | Medium | [Top K Frequent Words](Problems/0692.cpp) |
| 0695 | Medium | [Max Area of Island](Problems/0695.cpp) |
| 0698 | Medium | [Partition to K Equal Sum Subsets](Problems/0698.cpp) |
| 0699 | Hard | [Falling Squares](Problems/0699.cpp) |
| 0700 | Easy | [Search in a Binary Search Tree](Problems/0700.cpp) |
| 0701 | Medium | [Insert into a Binary Search Tree](Problems/0701.cpp) |