Skip to content

Commit 195017b

Browse files
authored
Update probability-of-a-two-boxes-having-the-same-number-of-distinct-balls.cpp
1 parent f0bf980 commit 195017b

File tree

1 file changed

+2
-15
lines changed

1 file changed

+2
-15
lines changed

C++/probability-of-a-two-boxes-having-the-same-number-of-distinct-balls.cpp

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,11 @@ class Solution {
99
for (const auto& n : balls) { // O(k) times
1010
unordered_map<pair<int, int>, uint64_t, PairHash<int>> new_dp;
1111
for (const auto& kvp : dp) { // O(k^2 * n) times
12-
const auto& cands = nCrs(n);
1312
const auto& [ndiff, cdiff] = kvp.first;
14-
for (int k = 0; k < cands.size(); ++k) { // O(n) times
13+
for (int k = 0, new_count = 1; k <= n; ++k, new_count *= n - k + 1, new_count /= k) { // O(n) times
1514
const auto& new_ndiff = ndiff + (k - (n - k));
1615
const auto& new_cdiff = (k == 0) ? cdiff - 1 : ((k == n) ? cdiff + 1 : cdiff);
17-
new_dp[pair(new_ndiff, new_cdiff)] += kvp.second * cands[k];
16+
new_dp[pair(new_ndiff, new_cdiff)] += kvp.second * new_count;
1817
}
1918
}
2019
dp = move(new_dp);
@@ -24,18 +23,6 @@ class Solution {
2423
}
2524

2625
private:
27-
vector<uint64_t> nCrs(int n) { // Time: O(n), Space: O(n)
28-
vector<uint64_t> cs;
29-
uint64_t c = 1;
30-
cs.emplace_back(c);
31-
for (int k = 1; k <= n; ++k) {
32-
c *= n - k + 1;
33-
c /= k;
34-
cs.emplace_back(c);
35-
}
36-
return cs;
37-
}
38-
3926
uint64_t nCr(int n, int r) { // Time: O(n), Space: O(1)
4027
if (n - r < r) {
4128
return nCr(n, n - r);

0 commit comments

Comments
 (0)