Skip to content

Commit 3cef149

Browse files
committed
feat: leetcode contest 301
1 parent 7e72967 commit 3cef149

4 files changed

+111
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* @param {number[]} amount
3+
* @return {number}
4+
*/
5+
var fillCups = function(a) {
6+
a = a.sort((x, y) => x-y).filter(x => x!= 0)
7+
let ans = 0
8+
while (a.length) {
9+
// console.log(a)
10+
if (a.length >= 2) a[0]--, a[a.length-1]--
11+
else a[0]--
12+
a = a.sort((x, y) => x-y).filter(x => x!= 0)
13+
ans++
14+
}
15+
return ans
16+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class SmallestInfiniteSet {
2+
set<int> s;
3+
4+
public:
5+
SmallestInfiniteSet() {
6+
for (int i = 1; i <= 1e3; i++) s.insert(i);
7+
}
8+
9+
int popSmallest() {
10+
int x = *s.begin();
11+
s.erase(s.begin());
12+
return x;
13+
}
14+
15+
void addBack(int num) {
16+
s.insert(num);
17+
}
18+
};
19+
20+
/**
21+
* Your SmallestInfiniteSet object will be instantiated and called as such:
22+
* SmallestInfiniteSet* obj = new SmallestInfiniteSet();
23+
* int param_1 = obj->popSmallest();
24+
* obj->addBack(num);
25+
*/
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* @param {string} start
3+
* @param {string} target
4+
* @return {boolean}
5+
*/
6+
const canChange = function (s, t) {
7+
const ca = s.split('').filter(x => x != '_').join('') === t.split('').filter(x => x != '_').join('')
8+
if (!ca) return false
9+
let a = []; let b = []
10+
for (let i = 0; i < s.length; i++) {
11+
if (s[i] === 'L') a.push(i)
12+
if (t[i] === 'L') b.push(i)
13+
}
14+
if (a.length !== b.length) return false
15+
for (let i = 0; i < a.length; i++) if (!(a[i] >= b[i])) return false
16+
17+
a = [], b = []
18+
for (let i = 0; i < s.length; i++) {
19+
if (s[i] === 'R') a.push(i)
20+
if (t[i] === 'R') b.push(i)
21+
}
22+
if (a.length !== b.length) return false
23+
for (let i = 0; i < a.length; i++) if (!(a[i] <= b[i])) return false
24+
25+
return true
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
function idealArrays (n: number, maxValue: number): number {
2+
// f[i][j] 表示 arr[i] 与 arr[i - 1] 不能相等 的情况下,以 i 为最后一个元素,长度为 j 的方案数
3+
// 因为 maxValue <= 1e4, j <= log_2 maxValue <= 13.2 < 14
4+
const MAX_LEN = 14; const P = 1e9 + 7
5+
6+
// maxValue log maxValue 时间复杂度求因子
7+
const frac = Array(maxValue + 1).fill(0).map<number[]>(() => [])
8+
for (let i = 1; i <= maxValue; i++) {
9+
for (let j = 2 * i; j <= maxValue; j += i) {
10+
if (j % i === 0) frac[j].push(i)
11+
}
12+
}
13+
14+
// maxValue log maxValue log maxValue
15+
const f = Array(maxValue + 1).fill(0).map(() => Array<number>(MAX_LEN + 1).fill(0))
16+
for (let i = 1; i <= maxValue; i++) {
17+
f[i][1] = 1
18+
for (let j = 2; j <= MAX_LEN; j++) {
19+
for (const k of frac[i]) f[i][j] = (f[i][j] + f[k][j - 1]) % P
20+
}
21+
}
22+
23+
// n log maxValue
24+
const c = Array(n + 1).fill(0).map(() => Array<number>(MAX_LEN + 1).fill(0))
25+
c[0][0] = 1
26+
for (let i = 1; i <= n; i++) {
27+
c[i][0] = 1
28+
for (let j = 1; j <= MAX_LEN && j <= i; j++) {
29+
c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % P
30+
}
31+
}
32+
33+
// maxValue log maxValue
34+
let ans = 0
35+
// 真正的长度为 n,arr[i] 与 arr[i - 1] 不能相等的情况下的长度为 t,在 n-1 个位置选 t-1 个位置作为值改变的起始点
36+
for (let i = 1; i <= maxValue; i++) {
37+
for (let j = 1; j <= MAX_LEN; j++) {
38+
ans = (ans + Number(BigInt(c[n - 1][j - 1]) * BigInt(f[i][j]) % BigInt(P))) % P
39+
}
40+
}
41+
return ans
42+
};
43+
44+
export declare const a: 1

0 commit comments

Comments
 (0)