Skip to content

Commit d666024

Browse files
committed
升级 bst
1 parent 87670e9 commit d666024

File tree

2 files changed

+21
-21
lines changed

2 files changed

+21
-21
lines changed

tweet-counts-per-frequency/index.ts

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,23 @@ import { BinarySearchTree } from "../deps.ts";
22
import { traversal_bst_range } from "./traversal_bst_range.ts";
33

44
export default class TweetCounts {
5-
#name_to_bst = new Map<string, BinarySearchTree<number, number>>();
6-
constructor() {}
5+
#name_to_bst = new Map<string, BinarySearchTree<number>>();
6+
#key_to_count = new Map<number, number>();
77

88
recordTweet(tweetName: string, time: number): void {
99
const bst = this.#name_to_bst.get(tweetName) ??
10-
new BinarySearchTree<number, number>();
10+
new BinarySearchTree<number>();
1111
const node = bst.find(time);
1212
if (node) {
13-
node.setValue(node.getValue() + 1);
13+
this.#key_to_count.set(
14+
time,
15+
(this.#key_to_count.get(time) ?? 0) + 1,
16+
);
17+
1418
return;
1519
}
16-
bst.insert(time, 1);
20+
bst.insert(time);
21+
this.#key_to_count.set(time, (this.#key_to_count.get(time) ?? 0) + 1);
1722
this.#name_to_bst.set(tweetName, bst);
1823
}
1924

@@ -38,14 +43,12 @@ export default class TweetCounts {
3843
const result: number[] = Array(
3944
Math.ceil((endTime - startTime + 1) / length),
4045
).fill(0);
41-
traversal_bst_range(
42-
bst.root(),
43-
startTime,
44-
endTime,
45-
(num: number, value: number) => {
46-
result[Math.floor((num - startTime + 1) / length)] += value;
47-
},
48-
);
46+
traversal_bst_range(bst.root(), startTime, endTime, (num: number) => {
47+
const time = num;
48+
const value = (this.#key_to_count.get(time) ?? 0);
49+
50+
result[Math.floor((num - startTime + 1) / length)] += value;
51+
});
4952
return result;
5053
}
5154
}

tweet-counts-per-frequency/traversal_bst_range.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,16 @@
11
import { BinarySearchTreeNode } from "../deps.ts";
22

3-
export function traversal_bst_range<
4-
K extends string | number = number,
5-
V = number,
6-
>(
7-
node: BinarySearchTreeNode<K, V> | null | undefined,
3+
export function traversal_bst_range<K extends string | number = number>(
4+
node: BinarySearchTreeNode<K> | null | undefined,
85
low: number,
96
high: number,
10-
callback: (key: K, value: V) => void,
7+
callback: (key: K) => void,
118
) {
129
if (!node) return;
1310

14-
const value = node.getKey();
11+
const value = node.getValue();
1512
if (value <= high && value >= low) {
16-
callback(value, node.getValue());
13+
callback(value);
1714
}
1815
if (value > low) {
1916
traversal_bst_range(node.getLeft(), low, high, callback);

0 commit comments

Comments
 (0)