data-structure-typed 2.5.1 → 2.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -1
- package/MIGRATION.md +169 -0
- package/README.md +135 -23
- package/README_CN.md +551 -143
- package/SPECIFICATION.md +20 -14
- package/SPECIFICATION.zh-CN.md +20 -14
- package/dist/cjs/binary-tree.cjs +6460 -1591
- package/dist/cjs/graph.cjs +440 -20
- package/dist/cjs/hash.cjs +125 -22
- package/dist/cjs/heap.cjs +196 -47
- package/dist/cjs/index.cjs +8486 -2429
- package/dist/cjs/linked-list.cjs +456 -31
- package/dist/cjs/matrix.cjs +79 -9
- package/dist/cjs/priority-queue.cjs +193 -44
- package/dist/cjs/queue.cjs +391 -2
- package/dist/cjs/stack.cjs +92 -6
- package/dist/cjs/trie.cjs +122 -28
- package/dist/cjs-legacy/binary-tree.cjs +6484 -1612
- package/dist/cjs-legacy/graph.cjs +440 -20
- package/dist/cjs-legacy/hash.cjs +125 -22
- package/dist/cjs-legacy/heap.cjs +196 -47
- package/dist/cjs-legacy/index.cjs +8654 -2594
- package/dist/cjs-legacy/linked-list.cjs +456 -31
- package/dist/cjs-legacy/matrix.cjs +79 -9
- package/dist/cjs-legacy/priority-queue.cjs +193 -44
- package/dist/cjs-legacy/queue.cjs +391 -2
- package/dist/cjs-legacy/stack.cjs +92 -6
- package/dist/cjs-legacy/trie.cjs +122 -28
- package/dist/esm/binary-tree.mjs +6460 -1591
- package/dist/esm/graph.mjs +440 -20
- package/dist/esm/hash.mjs +125 -22
- package/dist/esm/heap.mjs +196 -47
- package/dist/esm/index.mjs +8486 -2430
- package/dist/esm/linked-list.mjs +456 -31
- package/dist/esm/matrix.mjs +79 -9
- package/dist/esm/priority-queue.mjs +193 -44
- package/dist/esm/queue.mjs +391 -2
- package/dist/esm/stack.mjs +92 -6
- package/dist/esm/trie.mjs +122 -28
- package/dist/esm-legacy/binary-tree.mjs +6484 -1612
- package/dist/esm-legacy/graph.mjs +440 -20
- package/dist/esm-legacy/hash.mjs +125 -22
- package/dist/esm-legacy/heap.mjs +196 -47
- package/dist/esm-legacy/index.mjs +8654 -2595
- package/dist/esm-legacy/linked-list.mjs +456 -31
- package/dist/esm-legacy/matrix.mjs +79 -9
- package/dist/esm-legacy/priority-queue.mjs +193 -44
- package/dist/esm-legacy/queue.mjs +391 -2
- package/dist/esm-legacy/stack.mjs +92 -6
- package/dist/esm-legacy/trie.mjs +122 -28
- package/dist/types/common/error.d.ts +9 -0
- package/dist/types/common/index.d.ts +1 -1
- package/dist/types/data-structures/binary-tree/avl-tree.d.ts +98 -2
- package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +112 -0
- package/dist/types/data-structures/binary-tree/binary-tree.d.ts +214 -13
- package/dist/types/data-structures/binary-tree/bst.d.ts +294 -3
- package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +155 -8
- package/dist/types/data-structures/binary-tree/segment-tree.d.ts +48 -0
- package/dist/types/data-structures/binary-tree/tree-map.d.ts +1370 -323
- package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +1329 -316
- package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +1116 -295
- package/dist/types/data-structures/binary-tree/tree-set.d.ts +1330 -326
- package/dist/types/data-structures/graph/directed-graph.d.ts +80 -0
- package/dist/types/data-structures/graph/undirected-graph.d.ts +72 -0
- package/dist/types/data-structures/hash/hash-map.d.ts +95 -6
- package/dist/types/data-structures/heap/heap.d.ts +154 -12
- package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +143 -0
- package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +121 -1
- package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +144 -0
- package/dist/types/data-structures/matrix/matrix.d.ts +64 -0
- package/dist/types/data-structures/queue/deque.d.ts +142 -0
- package/dist/types/data-structures/queue/queue.d.ts +109 -0
- package/dist/types/data-structures/stack/stack.d.ts +82 -2
- package/dist/types/data-structures/trie/trie.d.ts +96 -0
- package/dist/types/interfaces/binary-tree.d.ts +2 -3
- package/dist/types/types/data-structures/binary-tree/bst.d.ts +1 -0
- package/dist/types/types/data-structures/binary-tree/tree-map.d.ts +5 -0
- package/dist/types/types/data-structures/binary-tree/tree-multi-set.d.ts +4 -0
- package/dist/types/types/data-structures/binary-tree/tree-set.d.ts +4 -0
- package/dist/umd/data-structure-typed.js +8623 -2564
- package/dist/umd/data-structure-typed.min.js +5 -5
- package/docs-site-docusaurus/docs/api/classes/AVLTree.md +696 -194
- package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +11 -11
- package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +71 -71
- package/docs-site-docusaurus/docs/api/classes/BST.md +639 -189
- package/docs-site-docusaurus/docs/api/classes/BSTNode.md +13 -13
- package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +15 -15
- package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +148 -160
- package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +13 -13
- package/docs-site-docusaurus/docs/api/classes/Deque.md +105 -91
- package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +82 -82
- package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +104 -74
- package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +8 -8
- package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +12 -12
- package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +1 -1
- package/docs-site-docusaurus/docs/api/classes/HashMap.md +51 -51
- package/docs-site-docusaurus/docs/api/classes/Heap.md +96 -85
- package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +25 -25
- package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +33 -33
- package/docs-site-docusaurus/docs/api/classes/LinearBase.md +50 -50
- package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +55 -55
- package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +55 -55
- package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +6 -6
- package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +78 -78
- package/docs-site-docusaurus/docs/api/classes/MapGraph.md +82 -82
- package/docs-site-docusaurus/docs/api/classes/Matrix.md +31 -31
- package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +104 -89
- package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +104 -89
- package/docs-site-docusaurus/docs/api/classes/MinHeap.md +104 -89
- package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +104 -89
- package/docs-site-docusaurus/docs/api/classes/Navigator.md +5 -5
- package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +103 -88
- package/docs-site-docusaurus/docs/api/classes/Queue.md +112 -60
- package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +708 -206
- package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +10 -10
- package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +79 -79
- package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +6 -6
- package/docs-site-docusaurus/docs/api/classes/SkipList.md +44 -44
- package/docs-site-docusaurus/docs/api/classes/Stack.md +42 -42
- package/docs-site-docusaurus/docs/api/classes/TreeMap.md +236 -33
- package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +162 -46
- package/docs-site-docusaurus/docs/api/classes/TreeSet.md +232 -32
- package/docs-site-docusaurus/docs/api/classes/Trie.md +47 -47
- package/docs-site-docusaurus/docs/api/classes/TrieNode.md +8 -8
- package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +81 -81
- package/docs-site-docusaurus/docs/guide/architecture.md +75 -5
- package/docs-site-docusaurus/docs/guide/concepts.md +53 -3
- package/docs-site-docusaurus/docs/guide/faq.md +233 -0
- package/docs-site-docusaurus/docs/guide/guides.md +43 -58
- package/docs-site-docusaurus/docs/guide/installation.md +2 -0
- package/docs-site-docusaurus/docs/guide/integrations.md +75 -176
- package/docs-site-docusaurus/docs/guide/overview.md +132 -11
- package/docs-site-docusaurus/docs/guide/performance.md +2 -0
- package/docs-site-docusaurus/docs/guide/quick-start.md +31 -0
- package/docs-site-docusaurus/docs/guide/use-cases/_category_.json +6 -0
- package/docs-site-docusaurus/docs/guide/use-cases/array-sort-alternative.md +158 -0
- package/docs-site-docusaurus/docs/guide/use-cases/heap-vs-sorting.md +92 -0
- package/docs-site-docusaurus/docs/guide/use-cases/map-vs-treemap.md +151 -0
- package/docs-site-docusaurus/docs/guide/use-cases/priority-queue-typescript.md +113 -0
- package/docs-site-docusaurus/docs/guide/use-cases/treemap-javascript.md +151 -0
- package/docs-site-docusaurus/docusaurus.config.ts +1 -1
- package/docs-site-docusaurus/src/pages/index.tsx +55 -2
- package/docs-site-docusaurus/static/llms.txt +37 -0
- package/docs-site-docusaurus/typedoc.json +1 -0
- package/llms.txt +37 -0
- package/package.json +65 -56
- package/src/common/error.ts +19 -1
- package/src/common/index.ts +1 -1
- package/src/data-structures/base/iterable-element-base.ts +3 -2
- package/src/data-structures/binary-tree/avl-tree.ts +99 -5
- package/src/data-structures/binary-tree/binary-indexed-tree.ts +102 -4
- package/src/data-structures/binary-tree/binary-tree.ts +239 -78
- package/src/data-structures/binary-tree/bst.ts +542 -13
- package/src/data-structures/binary-tree/red-black-tree.ts +155 -15
- package/src/data-structures/binary-tree/segment-tree.ts +42 -0
- package/src/data-structures/binary-tree/tree-map.ts +1223 -261
- package/src/data-structures/binary-tree/tree-multi-map.ts +939 -30
- package/src/data-structures/binary-tree/tree-multi-set.ts +746 -10
- package/src/data-structures/binary-tree/tree-set.ts +1018 -99
- package/src/data-structures/graph/abstract-graph.ts +2 -2
- package/src/data-structures/graph/directed-graph.ts +71 -1
- package/src/data-structures/graph/undirected-graph.ts +64 -1
- package/src/data-structures/hash/hash-map.ts +102 -16
- package/src/data-structures/heap/heap.ts +153 -23
- package/src/data-structures/heap/max-heap.ts +2 -2
- package/src/data-structures/linked-list/doubly-linked-list.ts +139 -0
- package/src/data-structures/linked-list/singly-linked-list.ts +106 -1
- package/src/data-structures/linked-list/skip-linked-list.ts +131 -5
- package/src/data-structures/matrix/matrix.ts +65 -9
- package/src/data-structures/priority-queue/max-priority-queue.ts +2 -2
- package/src/data-structures/queue/deque.ts +130 -0
- package/src/data-structures/queue/queue.ts +109 -0
- package/src/data-structures/stack/stack.ts +75 -5
- package/src/data-structures/trie/trie.ts +86 -2
- package/src/interfaces/binary-tree.ts +1 -9
- package/src/types/data-structures/binary-tree/bst.ts +1 -0
- package/src/types/data-structures/binary-tree/tree-map.ts +6 -0
- package/src/types/data-structures/binary-tree/tree-multi-set.ts +5 -0
- package/src/types/data-structures/binary-tree/tree-set.ts +5 -0
- package/.vitepress/cache/deps_temp_51f5f1b0/chunk-7OIKW5WK.js +0 -12984
- package/.vitepress/cache/deps_temp_51f5f1b0/package.json +0 -3
- package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vue_devtools-api.js +0 -4505
- package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vueuse_core.js +0 -9731
- package/.vitepress/cache/deps_temp_51f5f1b0/vue.js +0 -347
|
@@ -192,29 +192,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
192
192
|
|
|
193
193
|
|
|
194
194
|
|
|
195
|
-
* @example
|
|
196
|
-
* // Check empty
|
|
197
|
-
* console.log(new TreeSet().isEmpty()); // true;
|
|
198
|
-
*/
|
|
199
|
-
isEmpty(): boolean;
|
|
200
|
-
private _validateKey;
|
|
201
|
-
/**
|
|
202
|
-
* Add a key to the set (no-op if already present).
|
|
203
|
-
* @remarks Expected time O(log n)
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
195
|
|
|
219
196
|
|
|
220
197
|
|
|
@@ -255,6 +232,15 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
255
232
|
|
|
256
233
|
|
|
257
234
|
|
|
235
|
+
* @example
|
|
236
|
+
* // Check empty
|
|
237
|
+
* console.log(new TreeSet().isEmpty()); // true;
|
|
238
|
+
*/
|
|
239
|
+
isEmpty(): boolean;
|
|
240
|
+
private _validateKey;
|
|
241
|
+
/**
|
|
242
|
+
* Add a key to the set (no-op if already present).
|
|
243
|
+
* @remarks Expected time O(log n)
|
|
258
244
|
|
|
259
245
|
|
|
260
246
|
|
|
@@ -342,22 +328,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
342
328
|
|
|
343
329
|
|
|
344
330
|
|
|
345
|
-
* @example
|
|
346
|
-
* // Unique tags with sorted order
|
|
347
|
-
* const tags = new TreeSet<string>(['javascript', 'typescript', 'react', 'typescript', 'node']);
|
|
348
|
-
*
|
|
349
|
-
* // Duplicates removed, sorted alphabetically
|
|
350
|
-
* console.log([...tags]); // ['javascript', 'node', 'react', 'typescript'];
|
|
351
|
-
* console.log(tags.size); // 4;
|
|
352
|
-
*
|
|
353
|
-
* tags.add('angular');
|
|
354
|
-
* console.log(tags.first()); // 'angular';
|
|
355
|
-
* console.log(tags.last()); // 'typescript';
|
|
356
|
-
*/
|
|
357
|
-
add(key: K): this;
|
|
358
|
-
/**
|
|
359
|
-
* Test whether a key exists.
|
|
360
|
-
* @remarks Expected time O(log n)
|
|
361
331
|
|
|
362
332
|
|
|
363
333
|
|
|
@@ -452,6 +422,25 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
452
422
|
|
|
453
423
|
|
|
454
424
|
|
|
425
|
+
* @example
|
|
426
|
+
* // Unique tags with sorted order
|
|
427
|
+
* const tags = new TreeSet<string>(['javascript', 'typescript', 'react', 'typescript', 'node']);
|
|
428
|
+
*
|
|
429
|
+
* // Duplicates removed, sorted alphabetically
|
|
430
|
+
* console.log([...tags]); // ['javascript', 'node', 'react', 'typescript'];
|
|
431
|
+
* console.log(tags.size); // 4;
|
|
432
|
+
*
|
|
433
|
+
* tags.add('angular');
|
|
434
|
+
* console.log(tags.first()); // 'angular';
|
|
435
|
+
* console.log(tags.last()); // 'typescript';
|
|
436
|
+
*/
|
|
437
|
+
add(key: K): this;
|
|
438
|
+
/**
|
|
439
|
+
* Add multiple keys at once.
|
|
440
|
+
* @remarks Expected time O(m log n), where m is the number of keys.
|
|
441
|
+
* @param keys - Iterable of keys to add.
|
|
442
|
+
* @returns Array of booleans indicating whether each key was newly added.
|
|
443
|
+
|
|
455
444
|
|
|
456
445
|
|
|
457
446
|
|
|
@@ -467,6 +456,16 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
467
456
|
|
|
468
457
|
|
|
469
458
|
|
|
459
|
+
* @example
|
|
460
|
+
* // Add multiple keys
|
|
461
|
+
* const ts = new TreeSet<number>();
|
|
462
|
+
* ts.addMany([5, 3, 7, 1, 9]);
|
|
463
|
+
* console.log(ts.size); // 5;
|
|
464
|
+
*/
|
|
465
|
+
addMany(keys: Iterable<K>): boolean[];
|
|
466
|
+
/**
|
|
467
|
+
* Test whether a key exists.
|
|
468
|
+
* @remarks Expected time O(log n)
|
|
470
469
|
|
|
471
470
|
|
|
472
471
|
|
|
@@ -507,18 +506,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
507
506
|
|
|
508
507
|
|
|
509
508
|
|
|
510
|
-
* @example
|
|
511
|
-
* // Checking membership in a sorted collection
|
|
512
|
-
* const allowed = new TreeSet<string>(['admin', 'editor', 'viewer']);
|
|
513
|
-
*
|
|
514
|
-
* console.log(allowed.has('admin')); // true;
|
|
515
|
-
* console.log(allowed.has('guest')); // false;
|
|
516
|
-
*/
|
|
517
|
-
has(key: K): boolean;
|
|
518
|
-
/**
|
|
519
|
-
* Delete a key.
|
|
520
|
-
* @returns `true` if the key existed; otherwise `false`.
|
|
521
|
-
* @remarks Expected time O(log n)
|
|
522
509
|
|
|
523
510
|
|
|
524
511
|
|
|
@@ -669,23 +656,17 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
669
656
|
|
|
670
657
|
|
|
671
658
|
* @example
|
|
672
|
-
* //
|
|
673
|
-
* const
|
|
659
|
+
* // Checking membership in a sorted collection
|
|
660
|
+
* const allowed = new TreeSet<string>(['admin', 'editor', 'viewer']);
|
|
674
661
|
*
|
|
675
|
-
* console.log(
|
|
676
|
-
* console.log(
|
|
677
|
-
* console.log([...nums]); // [1, 3, 7, 9];
|
|
662
|
+
* console.log(allowed.has('admin')); // true;
|
|
663
|
+
* console.log(allowed.has('guest')); // false;
|
|
678
664
|
*/
|
|
679
|
-
|
|
665
|
+
has(key: K): boolean;
|
|
680
666
|
/**
|
|
681
|
-
*
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
667
|
+
* Delete a key.
|
|
668
|
+
* @returns `true` if the key existed; otherwise `false`.
|
|
669
|
+
* @remarks Expected time O(log n)
|
|
689
670
|
|
|
690
671
|
|
|
691
672
|
|
|
@@ -817,15 +798,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
817
798
|
|
|
818
799
|
|
|
819
800
|
|
|
820
|
-
* @example
|
|
821
|
-
* // Remove all
|
|
822
|
-
* const ts = new TreeSet<number>([1, 2]);
|
|
823
|
-
* ts.clear();
|
|
824
|
-
* console.log(ts.isEmpty()); // true;
|
|
825
|
-
*/
|
|
826
|
-
clear(): void;
|
|
827
|
-
/**
|
|
828
|
-
* Iterate over keys in ascending order.
|
|
829
801
|
|
|
830
802
|
|
|
831
803
|
|
|
@@ -884,6 +856,24 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
884
856
|
|
|
885
857
|
|
|
886
858
|
|
|
859
|
+
* @example
|
|
860
|
+
* // Removing elements while maintaining order
|
|
861
|
+
* const nums = new TreeSet<number>([1, 3, 5, 7, 9]);
|
|
862
|
+
*
|
|
863
|
+
* console.log(nums.delete(5)); // true;
|
|
864
|
+
* console.log(nums.delete(5)); // false; // already gone
|
|
865
|
+
* console.log([...nums]); // [1, 3, 7, 9];
|
|
866
|
+
*/
|
|
867
|
+
delete(key: K): boolean;
|
|
868
|
+
/**
|
|
869
|
+
* Delete all keys matching a predicate.
|
|
870
|
+
* @remarks Time O(N), Space O(N)
|
|
871
|
+
* @param predicate - Function (key, index, set) → boolean; return true to delete.
|
|
872
|
+
* @returns True if at least one key was deleted.
|
|
873
|
+
*/
|
|
874
|
+
deleteWhere(predicate: (key: K, index: number, set: this) => boolean): boolean;
|
|
875
|
+
/**
|
|
876
|
+
* Remove all keys.
|
|
887
877
|
|
|
888
878
|
|
|
889
879
|
|
|
@@ -964,16 +954,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
964
954
|
|
|
965
955
|
|
|
966
956
|
|
|
967
|
-
* @example
|
|
968
|
-
* // Get sorted keys
|
|
969
|
-
* const ts = new TreeSet<number>([30, 10, 20]);
|
|
970
|
-
* console.log([...ts.keys()]); // [10, 20, 30];
|
|
971
|
-
*/
|
|
972
|
-
keys(): IterableIterator<K>;
|
|
973
|
-
/**
|
|
974
|
-
* Iterate over values in ascending order.
|
|
975
|
-
*
|
|
976
|
-
* Note: for Set-like containers, `values()` is the same as `keys()`.
|
|
977
957
|
|
|
978
958
|
|
|
979
959
|
|
|
@@ -1072,6 +1052,15 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
1072
1052
|
|
|
1073
1053
|
|
|
1074
1054
|
|
|
1055
|
+
* @example
|
|
1056
|
+
* // Remove all
|
|
1057
|
+
* const ts = new TreeSet<number>([1, 2]);
|
|
1058
|
+
* ts.clear();
|
|
1059
|
+
* console.log(ts.isEmpty()); // true;
|
|
1060
|
+
*/
|
|
1061
|
+
clear(): void;
|
|
1062
|
+
/**
|
|
1063
|
+
* Iterate over keys in ascending order.
|
|
1075
1064
|
|
|
1076
1065
|
|
|
1077
1066
|
|
|
@@ -1112,16 +1101,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
1112
1101
|
|
|
1113
1102
|
|
|
1114
1103
|
|
|
1115
|
-
* @example
|
|
1116
|
-
* // Get values (same as keys for Set)
|
|
1117
|
-
* const ts = new TreeSet<number>([2, 1, 3]);
|
|
1118
|
-
* console.log([...ts.values()]); // [1, 2, 3];
|
|
1119
|
-
*/
|
|
1120
|
-
values(): IterableIterator<K>;
|
|
1121
|
-
/**
|
|
1122
|
-
* Iterate over `[value, value]` pairs (native Set convention).
|
|
1123
|
-
*
|
|
1124
|
-
* Note: TreeSet stores only keys internally; `[k, k]` is created on-the-fly during iteration.
|
|
1125
1104
|
|
|
1126
1105
|
|
|
1127
1106
|
|
|
@@ -1261,18 +1240,15 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
1261
1240
|
|
|
1262
1241
|
|
|
1263
1242
|
* @example
|
|
1264
|
-
* //
|
|
1265
|
-
* const ts = new TreeSet<number>([
|
|
1266
|
-
* console.log([...ts.
|
|
1243
|
+
* // Get sorted keys
|
|
1244
|
+
* const ts = new TreeSet<number>([30, 10, 20]);
|
|
1245
|
+
* console.log([...ts.keys()]); // [10, 20, 30];
|
|
1267
1246
|
*/
|
|
1268
|
-
|
|
1269
|
-
[Symbol.iterator](): IterableIterator<K>;
|
|
1247
|
+
keys(): IterableIterator<K>;
|
|
1270
1248
|
/**
|
|
1271
|
-
*
|
|
1249
|
+
* Iterate over values in ascending order.
|
|
1272
1250
|
*
|
|
1273
|
-
*
|
|
1274
|
-
|
|
1275
|
-
|
|
1251
|
+
* Note: for Set-like containers, `values()` is the same as `keys()`.
|
|
1276
1252
|
|
|
1277
1253
|
|
|
1278
1254
|
|
|
@@ -1409,19 +1385,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
1409
1385
|
|
|
1410
1386
|
|
|
1411
1387
|
|
|
1412
|
-
* @example
|
|
1413
|
-
* // Execute for each
|
|
1414
|
-
* const ts = new TreeSet<number>([3, 1, 2]);
|
|
1415
|
-
* const keys: number[] = [];
|
|
1416
|
-
* ts.forEach(k => keys.push(k));
|
|
1417
|
-
* console.log(keys); // [1, 2, 3];
|
|
1418
|
-
*/
|
|
1419
|
-
forEach(cb: (value: K, value2: K, set: TreeSet<K>) => void, thisArg?: unknown): void;
|
|
1420
|
-
/**
|
|
1421
|
-
* Create a new TreeSet by mapping each value to a new key.
|
|
1422
|
-
*
|
|
1423
|
-
* This mirrors `RedBlackTree.map`: mapping produces a new ordered container.
|
|
1424
|
-
* @remarks Time O(n log n) expected, Space O(n)
|
|
1425
1388
|
|
|
1426
1389
|
|
|
1427
1390
|
|
|
@@ -1464,6 +1427,16 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
1464
1427
|
|
|
1465
1428
|
|
|
1466
1429
|
|
|
1430
|
+
* @example
|
|
1431
|
+
* // Get values (same as keys for Set)
|
|
1432
|
+
* const ts = new TreeSet<number>([2, 1, 3]);
|
|
1433
|
+
* console.log([...ts.values()]); // [1, 2, 3];
|
|
1434
|
+
*/
|
|
1435
|
+
values(): IterableIterator<K>;
|
|
1436
|
+
/**
|
|
1437
|
+
* Iterate over `[value, value]` pairs (native Set convention).
|
|
1438
|
+
*
|
|
1439
|
+
* Note: TreeSet stores only keys internally; `[k, k]` is created on-the-fly during iteration.
|
|
1467
1440
|
|
|
1468
1441
|
|
|
1469
1442
|
|
|
@@ -1560,18 +1533,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
1560
1533
|
|
|
1561
1534
|
|
|
1562
1535
|
|
|
1563
|
-
* @example
|
|
1564
|
-
* // Transform
|
|
1565
|
-
* const ts = new TreeSet<number>([1, 2, 3]);
|
|
1566
|
-
* const doubled = ts.map(k => k * 2);
|
|
1567
|
-
* console.log([...doubled]); // [2, 4, 6];
|
|
1568
|
-
*/
|
|
1569
|
-
map<MK>(callbackfn: TreeSetElementCallback<K, MK, TreeSet<K>>, options?: Omit<TreeSetOptions<MK>, 'toElementFn'> & {
|
|
1570
|
-
comparator?: (a: MK, b: MK) => number;
|
|
1571
|
-
}, thisArg?: unknown): TreeSet<MK>;
|
|
1572
|
-
/**
|
|
1573
|
-
* Create a new TreeSet containing only values that satisfy the predicate.
|
|
1574
|
-
* @remarks Time O(n log n) expected, Space O(n)
|
|
1575
1536
|
|
|
1576
1537
|
|
|
1577
1538
|
|
|
@@ -1654,6 +1615,17 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
1654
1615
|
|
|
1655
1616
|
|
|
1656
1617
|
|
|
1618
|
+
* @example
|
|
1619
|
+
* // Iterate entries
|
|
1620
|
+
* const ts = new TreeSet<number>([3, 1, 2]);
|
|
1621
|
+
* console.log([...ts.entries()].map(([k]) => k)); // [1, 2, 3];
|
|
1622
|
+
*/
|
|
1623
|
+
entries(): IterableIterator<[K, K]>;
|
|
1624
|
+
[Symbol.iterator](): IterableIterator<K>;
|
|
1625
|
+
/**
|
|
1626
|
+
* Visit each value in ascending order.
|
|
1627
|
+
*
|
|
1628
|
+
* Callback follows native Set convention: `(value, value2, set)`.
|
|
1657
1629
|
|
|
1658
1630
|
|
|
1659
1631
|
|
|
@@ -1710,16 +1682,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
1710
1682
|
|
|
1711
1683
|
|
|
1712
1684
|
|
|
1713
|
-
* @example
|
|
1714
|
-
* // Filter
|
|
1715
|
-
* const ts = new TreeSet<number>([1, 2, 3, 4, 5]);
|
|
1716
|
-
* const evens = ts.filter(k => k % 2 === 0);
|
|
1717
|
-
* console.log([...evens]); // [2, 4];
|
|
1718
|
-
*/
|
|
1719
|
-
filter(callbackfn: TreeSetElementCallback<K, boolean, TreeSet<K>>, thisArg?: unknown): TreeSet<K>;
|
|
1720
|
-
/**
|
|
1721
|
-
* Reduce values into a single accumulator.
|
|
1722
|
-
* @remarks Time O(n), Space O(1)
|
|
1723
1685
|
|
|
1724
1686
|
|
|
1725
1687
|
|
|
@@ -1842,6 +1804,19 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
1842
1804
|
|
|
1843
1805
|
|
|
1844
1806
|
|
|
1807
|
+
* @example
|
|
1808
|
+
* // Execute for each
|
|
1809
|
+
* const ts = new TreeSet<number>([3, 1, 2]);
|
|
1810
|
+
* const keys: number[] = [];
|
|
1811
|
+
* ts.forEach(k => keys.push(k));
|
|
1812
|
+
* console.log(keys); // [1, 2, 3];
|
|
1813
|
+
*/
|
|
1814
|
+
forEach(cb: (value: K, value2: K, set: TreeSet<K>) => void, thisArg?: unknown): void;
|
|
1815
|
+
/**
|
|
1816
|
+
* Create a new TreeSet by mapping each value to a new key.
|
|
1817
|
+
*
|
|
1818
|
+
* This mirrors `RedBlackTree.map`: mapping produces a new ordered container.
|
|
1819
|
+
* @remarks Time O(n log n) expected, Space O(n)
|
|
1845
1820
|
|
|
1846
1821
|
|
|
1847
1822
|
|
|
@@ -1858,16 +1833,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
1858
1833
|
|
|
1859
1834
|
|
|
1860
1835
|
|
|
1861
|
-
* @example
|
|
1862
|
-
* // Aggregate
|
|
1863
|
-
* const ts = new TreeSet<number>([1, 2, 3]);
|
|
1864
|
-
* const sum = ts.reduce((acc, k) => acc + k, 0);
|
|
1865
|
-
* console.log(sum); // 6;
|
|
1866
|
-
*/
|
|
1867
|
-
reduce<A>(callbackfn: TreeSetReduceCallback<K, A, TreeSet<K>>, initialValue: A): A;
|
|
1868
|
-
/**
|
|
1869
|
-
* Test whether all values satisfy a predicate.
|
|
1870
|
-
* @remarks Time O(n), Space O(1)
|
|
1871
1836
|
|
|
1872
1837
|
|
|
1873
1838
|
|
|
@@ -2004,15 +1969,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
2004
1969
|
|
|
2005
1970
|
|
|
2006
1971
|
|
|
2007
|
-
* @example
|
|
2008
|
-
* // Test all
|
|
2009
|
-
* const ts = new TreeSet<number>([2, 4, 6]);
|
|
2010
|
-
* console.log(ts.every(k => k > 0)); // true;
|
|
2011
|
-
*/
|
|
2012
|
-
every(callbackfn: TreeSetElementCallback<K, boolean, TreeSet<K>>, thisArg?: unknown): boolean;
|
|
2013
|
-
/**
|
|
2014
|
-
* Test whether any value satisfies a predicate.
|
|
2015
|
-
* @remarks Time O(n), Space O(1)
|
|
2016
1972
|
|
|
2017
1973
|
|
|
2018
1974
|
|
|
@@ -2039,6 +1995,18 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
2039
1995
|
|
|
2040
1996
|
|
|
2041
1997
|
|
|
1998
|
+
* @example
|
|
1999
|
+
* // Transform
|
|
2000
|
+
* const ts = new TreeSet<number>([1, 2, 3]);
|
|
2001
|
+
* const doubled = ts.map(k => k * 2);
|
|
2002
|
+
* console.log([...doubled]); // [2, 4, 6];
|
|
2003
|
+
*/
|
|
2004
|
+
map<MK>(callbackfn: TreeSetElementCallback<K, MK, TreeSet<K>>, options?: Omit<TreeSetOptions<MK>, 'toElementFn'> & {
|
|
2005
|
+
comparator?: (a: MK, b: MK) => number;
|
|
2006
|
+
}, thisArg?: unknown): TreeSet<MK>;
|
|
2007
|
+
/**
|
|
2008
|
+
* Create a new TreeSet containing only values that satisfy the predicate.
|
|
2009
|
+
* @remarks Time O(n log n) expected, Space O(n)
|
|
2042
2010
|
|
|
2043
2011
|
|
|
2044
2012
|
|
|
@@ -2149,15 +2117,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
2149
2117
|
|
|
2150
2118
|
|
|
2151
2119
|
|
|
2152
|
-
* @example
|
|
2153
|
-
* // Test any
|
|
2154
|
-
* const ts = new TreeSet<number>([1, 3, 5]);
|
|
2155
|
-
* console.log(ts.some(k => k === 3)); // true;
|
|
2156
|
-
*/
|
|
2157
|
-
some(callbackfn: TreeSetElementCallback<K, boolean, TreeSet<K>>, thisArg?: unknown): boolean;
|
|
2158
|
-
/**
|
|
2159
|
-
* Find the first value that satisfies a predicate.
|
|
2160
|
-
* @remarks Time O(n), Space O(1)
|
|
2161
2120
|
|
|
2162
2121
|
|
|
2163
2122
|
|
|
@@ -2226,6 +2185,16 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
2226
2185
|
|
|
2227
2186
|
|
|
2228
2187
|
|
|
2188
|
+
* @example
|
|
2189
|
+
* // Filter
|
|
2190
|
+
* const ts = new TreeSet<number>([1, 2, 3, 4, 5]);
|
|
2191
|
+
* const evens = ts.filter(k => k % 2 === 0);
|
|
2192
|
+
* console.log([...evens]); // [2, 4];
|
|
2193
|
+
*/
|
|
2194
|
+
filter(callbackfn: TreeSetElementCallback<K, boolean, TreeSet<K>>, thisArg?: unknown): TreeSet<K>;
|
|
2195
|
+
/**
|
|
2196
|
+
* Reduce values into a single accumulator.
|
|
2197
|
+
* @remarks Time O(n), Space O(1)
|
|
2229
2198
|
|
|
2230
2199
|
|
|
2231
2200
|
|
|
@@ -2294,16 +2263,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
2294
2263
|
|
|
2295
2264
|
|
|
2296
2265
|
|
|
2297
|
-
* @example
|
|
2298
|
-
* // Find entry
|
|
2299
|
-
* const ts = new TreeSet<number>([1, 2, 3]);
|
|
2300
|
-
* const found = ts.find(k => k === 2);
|
|
2301
|
-
* console.log(found); // 2;
|
|
2302
|
-
*/
|
|
2303
|
-
find(callbackfn: TreeSetElementCallback<K, boolean, TreeSet<K>>, thisArg?: unknown): K | undefined;
|
|
2304
|
-
/**
|
|
2305
|
-
* Materialize the set into an array of keys.
|
|
2306
|
-
* @remarks Time O(n), Space O(n)
|
|
2307
2266
|
|
|
2308
2267
|
|
|
2309
2268
|
|
|
@@ -2414,6 +2373,16 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
2414
2373
|
|
|
2415
2374
|
|
|
2416
2375
|
|
|
2376
|
+
* @example
|
|
2377
|
+
* // Aggregate
|
|
2378
|
+
* const ts = new TreeSet<number>([1, 2, 3]);
|
|
2379
|
+
* const sum = ts.reduce((acc, k) => acc + k, 0);
|
|
2380
|
+
* console.log(sum); // 6;
|
|
2381
|
+
*/
|
|
2382
|
+
reduce<A>(callbackfn: TreeSetReduceCallback<K, A, TreeSet<K>>, initialValue: A): A;
|
|
2383
|
+
/**
|
|
2384
|
+
* Test whether all values satisfy a predicate.
|
|
2385
|
+
* @remarks Time O(n), Space O(1)
|
|
2417
2386
|
|
|
2418
2387
|
|
|
2419
2388
|
|
|
@@ -2442,15 +2411,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
2442
2411
|
|
|
2443
2412
|
|
|
2444
2413
|
|
|
2445
|
-
* @example
|
|
2446
|
-
* // Convert to array
|
|
2447
|
-
* const ts = new TreeSet<number>([3, 1, 2]);
|
|
2448
|
-
* console.log(ts.toArray()); // [1, 2, 3];
|
|
2449
|
-
*/
|
|
2450
|
-
toArray(): K[];
|
|
2451
|
-
/**
|
|
2452
|
-
* Print a human-friendly representation.
|
|
2453
|
-
* @remarks Time O(n), Space O(n)
|
|
2454
2414
|
|
|
2455
2415
|
|
|
2456
2416
|
|
|
@@ -2589,14 +2549,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
2589
2549
|
|
|
2590
2550
|
|
|
2591
2551
|
|
|
2592
|
-
* @example
|
|
2593
|
-
* // Display tree
|
|
2594
|
-
* const ts = new TreeSet<number>([1, 2, 3]);
|
|
2595
|
-
* expect(() => ts.print()).not.toThrow();
|
|
2596
|
-
*/
|
|
2597
|
-
print(): void;
|
|
2598
|
-
/**
|
|
2599
|
-
* Smallest key in the set.
|
|
2600
2552
|
|
|
2601
2553
|
|
|
2602
2554
|
|
|
@@ -2607,6 +2559,15 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
2607
2559
|
|
|
2608
2560
|
|
|
2609
2561
|
|
|
2562
|
+
* @example
|
|
2563
|
+
* // Test all
|
|
2564
|
+
* const ts = new TreeSet<number>([2, 4, 6]);
|
|
2565
|
+
* console.log(ts.every(k => k > 0)); // true;
|
|
2566
|
+
*/
|
|
2567
|
+
every(callbackfn: TreeSetElementCallback<K, boolean, TreeSet<K>>, thisArg?: unknown): boolean;
|
|
2568
|
+
/**
|
|
2569
|
+
* Test whether any value satisfies a predicate.
|
|
2570
|
+
* @remarks Time O(n), Space O(1)
|
|
2610
2571
|
|
|
2611
2572
|
|
|
2612
2573
|
|
|
@@ -2628,37 +2589,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
2628
2589
|
|
|
2629
2590
|
|
|
2630
2591
|
|
|
2631
|
-
* @example
|
|
2632
|
-
* // Student grade ranking with custom comparator
|
|
2633
|
-
* interface Student {
|
|
2634
|
-
* name: string;
|
|
2635
|
-
* gpa: number;
|
|
2636
|
-
* }
|
|
2637
|
-
*
|
|
2638
|
-
* const ranking = new TreeSet<Student>(
|
|
2639
|
-
* [
|
|
2640
|
-
* { name: 'Alice', gpa: 3.8 },
|
|
2641
|
-
* { name: 'Bob', gpa: 3.5 },
|
|
2642
|
-
* { name: 'Charlie', gpa: 3.9 },
|
|
2643
|
-
* { name: 'Diana', gpa: 3.5 }
|
|
2644
|
-
* ],
|
|
2645
|
-
* { comparator: (a, b) => b.gpa - a.gpa || a.name.localeCompare(b.name) }
|
|
2646
|
-
* );
|
|
2647
|
-
*
|
|
2648
|
-
* // Sorted by GPA descending, then name ascending
|
|
2649
|
-
* const names = [...ranking].map(s => s.name);
|
|
2650
|
-
* console.log(names); // ['Charlie', 'Alice', 'Bob', 'Diana'];
|
|
2651
|
-
*
|
|
2652
|
-
* // Top student
|
|
2653
|
-
* console.log(ranking.first()?.name); // 'Charlie';
|
|
2654
|
-
*
|
|
2655
|
-
* // Filter students with GPA >= 3.8
|
|
2656
|
-
* const honors = ranking.filter(s => s.gpa >= 3.8);
|
|
2657
|
-
* console.log(honors.toArray().map(s => s.name)); // ['Charlie', 'Alice'];
|
|
2658
|
-
*/
|
|
2659
|
-
first(): K | undefined;
|
|
2660
|
-
/**
|
|
2661
|
-
* Largest key in the set.
|
|
2662
2592
|
|
|
2663
2593
|
|
|
2664
2594
|
|
|
@@ -2690,15 +2620,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
2690
2620
|
|
|
2691
2621
|
|
|
2692
2622
|
|
|
2693
|
-
* @example
|
|
2694
|
-
* // Get the maximum element
|
|
2695
|
-
* const temps = new TreeSet<number>([18, 22, 15, 30, 25]);
|
|
2696
|
-
* console.log(temps.last()); // 30;
|
|
2697
|
-
* console.log(temps.first()); // 15;
|
|
2698
|
-
*/
|
|
2699
|
-
last(): K | undefined;
|
|
2700
|
-
/**
|
|
2701
|
-
* Remove and return the smallest key.
|
|
2702
2623
|
|
|
2703
2624
|
|
|
2704
2625
|
|
|
@@ -2730,17 +2651,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
2730
2651
|
|
|
2731
2652
|
|
|
2732
2653
|
|
|
2733
|
-
* @example
|
|
2734
|
-
* // Remove and return minimum
|
|
2735
|
-
* const queue = new TreeSet<number>([5, 1, 8, 3]);
|
|
2736
|
-
*
|
|
2737
|
-
* console.log(queue.pollFirst()); // 1;
|
|
2738
|
-
* console.log(queue.pollFirst()); // 3;
|
|
2739
|
-
* console.log(queue.size); // 2;
|
|
2740
|
-
*/
|
|
2741
|
-
pollFirst(): K | undefined;
|
|
2742
|
-
/**
|
|
2743
|
-
* Remove and return the largest key.
|
|
2744
2654
|
|
|
2745
2655
|
|
|
2746
2656
|
|
|
@@ -2772,16 +2682,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
2772
2682
|
|
|
2773
2683
|
|
|
2774
2684
|
|
|
2775
|
-
* @example
|
|
2776
|
-
* // Remove and return maximum
|
|
2777
|
-
* const stack = new TreeSet<number>([10, 20, 30]);
|
|
2778
|
-
*
|
|
2779
|
-
* console.log(stack.pollLast()); // 30;
|
|
2780
|
-
* console.log(stack.size); // 2;
|
|
2781
|
-
*/
|
|
2782
|
-
pollLast(): K | undefined;
|
|
2783
|
-
/**
|
|
2784
|
-
* Smallest key that is >= the given key.
|
|
2785
2685
|
|
|
2786
2686
|
|
|
2787
2687
|
|
|
@@ -2844,6 +2744,17 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
2844
2744
|
|
|
2845
2745
|
|
|
2846
2746
|
|
|
2747
|
+
* @example
|
|
2748
|
+
* // Test any
|
|
2749
|
+
* const ts = new TreeSet<number>([1, 3, 5]);
|
|
2750
|
+
* console.log(ts.some(k => k === 3)); // true;
|
|
2751
|
+
*/
|
|
2752
|
+
some(callbackfn: TreeSetElementCallback<K, boolean, TreeSet<K>>, thisArg?: unknown): boolean;
|
|
2753
|
+
/**
|
|
2754
|
+
* Find the first value that satisfies a predicate.
|
|
2755
|
+
* @remarks Time O(n), Space O(1)
|
|
2756
|
+
|
|
2757
|
+
|
|
2847
2758
|
|
|
2848
2759
|
|
|
2849
2760
|
|
|
@@ -2900,26 +2811,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
2900
2811
|
|
|
2901
2812
|
|
|
2902
2813
|
|
|
2903
|
-
* @example
|
|
2904
|
-
* // Finding nearest available time slot
|
|
2905
|
-
* // Available appointment times (minutes from midnight)
|
|
2906
|
-
* const slots = new TreeSet<number>([540, 600, 660, 720, 840, 900]);
|
|
2907
|
-
*
|
|
2908
|
-
* // Customer wants something around 10:30 (630 min)
|
|
2909
|
-
* const nearest = slots.ceiling(630);
|
|
2910
|
-
* console.log(nearest); // 660; // 11:00 AM
|
|
2911
|
-
*
|
|
2912
|
-
* // What's the latest slot before 2:00 PM (840)?
|
|
2913
|
-
* const before2pm = slots.lower(840);
|
|
2914
|
-
* console.log(before2pm); // 720; // 12:00 PM
|
|
2915
|
-
*
|
|
2916
|
-
* // Book the 11:00 slot
|
|
2917
|
-
* slots.delete(660);
|
|
2918
|
-
* console.log(slots.ceiling(630)); // 720;
|
|
2919
|
-
*/
|
|
2920
|
-
ceiling(key: K): K | undefined;
|
|
2921
|
-
/**
|
|
2922
|
-
* Largest key that is <= the given key.
|
|
2923
2814
|
|
|
2924
2815
|
|
|
2925
2816
|
|
|
@@ -3039,17 +2930,15 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
3039
2930
|
|
|
3040
2931
|
|
|
3041
2932
|
* @example
|
|
3042
|
-
* //
|
|
3043
|
-
* const
|
|
3044
|
-
*
|
|
3045
|
-
*
|
|
3046
|
-
* console.log(breakpoints.floor(800)); // 768;
|
|
3047
|
-
* console.log(breakpoints.floor(1024)); // 1024; // exact match
|
|
3048
|
-
* console.log(breakpoints.floor(100)); // undefined;
|
|
2933
|
+
* // Find entry
|
|
2934
|
+
* const ts = new TreeSet<number>([1, 2, 3]);
|
|
2935
|
+
* const found = ts.find(k => k === 2);
|
|
2936
|
+
* console.log(found); // 2;
|
|
3049
2937
|
*/
|
|
3050
|
-
|
|
2938
|
+
find(callbackfn: TreeSetElementCallback<K, boolean, TreeSet<K>>, thisArg?: unknown): K | undefined;
|
|
3051
2939
|
/**
|
|
3052
|
-
*
|
|
2940
|
+
* Materialize the set into an array of keys.
|
|
2941
|
+
* @remarks Time O(n), Space O(n)
|
|
3053
2942
|
|
|
3054
2943
|
|
|
3055
2944
|
|
|
@@ -3168,16 +3057,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
3168
3057
|
|
|
3169
3058
|
|
|
3170
3059
|
|
|
3171
|
-
* @example
|
|
3172
|
-
* // Smallest element strictly > target
|
|
3173
|
-
* const levels = new TreeSet<number>([1, 5, 10, 25, 50, 100]);
|
|
3174
|
-
*
|
|
3175
|
-
* console.log(levels.higher(10)); // 25;
|
|
3176
|
-
* console.log(levels.higher(100)); // undefined;
|
|
3177
|
-
*/
|
|
3178
|
-
higher(key: K): K | undefined;
|
|
3179
|
-
/**
|
|
3180
|
-
* Largest key that is < the given key.
|
|
3181
3060
|
|
|
3182
3061
|
|
|
3183
3062
|
|
|
@@ -3238,6 +3117,17 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
3238
3117
|
|
|
3239
3118
|
|
|
3240
3119
|
|
|
3120
|
+
* @example
|
|
3121
|
+
* // Convert to array
|
|
3122
|
+
* const ts = new TreeSet<number>([3, 1, 2]);
|
|
3123
|
+
* console.log(ts.toArray()); // [1, 2, 3];
|
|
3124
|
+
*/
|
|
3125
|
+
toArray(): K[];
|
|
3126
|
+
/**
|
|
3127
|
+
* Print a human-friendly representation.
|
|
3128
|
+
* @remarks Time O(n), Space O(n)
|
|
3129
|
+
|
|
3130
|
+
|
|
3241
3131
|
|
|
3242
3132
|
|
|
3243
3133
|
|
|
@@ -3296,19 +3186,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
3296
3186
|
|
|
3297
3187
|
|
|
3298
3188
|
|
|
3299
|
-
* @example
|
|
3300
|
-
* // Largest element strictly < target
|
|
3301
|
-
* const tiers = new TreeSet<number>([100, 200, 500, 1000]);
|
|
3302
|
-
*
|
|
3303
|
-
* console.log(tiers.lower(500)); // 200;
|
|
3304
|
-
* console.log(tiers.lower(100)); // undefined;
|
|
3305
|
-
*/
|
|
3306
|
-
lower(key: K): K | undefined;
|
|
3307
|
-
/**
|
|
3308
|
-
* Return all keys in a given range.
|
|
3309
|
-
*
|
|
3310
|
-
* @param range `[low, high]`
|
|
3311
|
-
* @param options Inclusive/exclusive bounds (defaults to inclusive).
|
|
3312
3189
|
|
|
3313
3190
|
|
|
3314
3191
|
|
|
@@ -3428,28 +3305,1155 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
|
|
|
3428
3305
|
|
|
3429
3306
|
|
|
3430
3307
|
* @example
|
|
3431
|
-
* //
|
|
3432
|
-
*
|
|
3433
|
-
*
|
|
3434
|
-
* 167772160, // 10.0.0.0
|
|
3435
|
-
* 167772416, // 10.0.1.0
|
|
3436
|
-
* 167772672, // 10.0.2.0
|
|
3437
|
-
* 167773184 // 10.0.4.0
|
|
3438
|
-
* ]);
|
|
3439
|
-
*
|
|
3440
|
-
* // Check if any blocked IP is in range 10.0.1.0 - 10.0.3.0
|
|
3441
|
-
* const inRange = blocklist.rangeSearch([167772416, 167772928]);
|
|
3442
|
-
* console.log(inRange); // [167772416, 167772672];
|
|
3443
|
-
*
|
|
3444
|
-
* // Quick membership check
|
|
3445
|
-
* console.log(blocklist.has(167772416)); // true;
|
|
3446
|
-
* console.log(blocklist.has(167772800)); // false;
|
|
3308
|
+
* // Display tree
|
|
3309
|
+
* const ts = new TreeSet<number>([1, 2, 3]);
|
|
3310
|
+
* expect(() => ts.print()).not.toThrow();
|
|
3447
3311
|
*/
|
|
3448
|
-
|
|
3312
|
+
print(): void;
|
|
3449
3313
|
/**
|
|
3450
|
-
*
|
|
3451
|
-
|
|
3452
|
-
|
|
3314
|
+
* Smallest key in the set.
|
|
3315
|
+
|
|
3316
|
+
|
|
3317
|
+
|
|
3318
|
+
|
|
3319
|
+
|
|
3320
|
+
|
|
3321
|
+
|
|
3322
|
+
|
|
3323
|
+
|
|
3324
|
+
|
|
3325
|
+
|
|
3326
|
+
|
|
3327
|
+
|
|
3328
|
+
|
|
3329
|
+
|
|
3330
|
+
|
|
3331
|
+
|
|
3332
|
+
|
|
3333
|
+
|
|
3334
|
+
|
|
3335
|
+
|
|
3336
|
+
|
|
3337
|
+
|
|
3338
|
+
|
|
3339
|
+
|
|
3340
|
+
|
|
3341
|
+
|
|
3342
|
+
|
|
3343
|
+
|
|
3344
|
+
|
|
3345
|
+
|
|
3346
|
+
|
|
3347
|
+
|
|
3348
|
+
|
|
3349
|
+
|
|
3350
|
+
|
|
3351
|
+
|
|
3352
|
+
|
|
3353
|
+
|
|
3354
|
+
* @example
|
|
3355
|
+
* // Student grade ranking with custom comparator
|
|
3356
|
+
* interface Student {
|
|
3357
|
+
* name: string;
|
|
3358
|
+
* gpa: number;
|
|
3359
|
+
* }
|
|
3360
|
+
*
|
|
3361
|
+
* const ranking = new TreeSet<Student>(
|
|
3362
|
+
* [
|
|
3363
|
+
* { name: 'Alice', gpa: 3.8 },
|
|
3364
|
+
* { name: 'Bob', gpa: 3.5 },
|
|
3365
|
+
* { name: 'Charlie', gpa: 3.9 },
|
|
3366
|
+
* { name: 'Diana', gpa: 3.5 }
|
|
3367
|
+
* ],
|
|
3368
|
+
* { comparator: (a, b) => b.gpa - a.gpa || a.name.localeCompare(b.name) }
|
|
3369
|
+
* );
|
|
3370
|
+
*
|
|
3371
|
+
* // Sorted by GPA descending, then name ascending
|
|
3372
|
+
* const names = [...ranking].map(s => s.name);
|
|
3373
|
+
* console.log(names); // ['Charlie', 'Alice', 'Bob', 'Diana'];
|
|
3374
|
+
*
|
|
3375
|
+
* // Top student
|
|
3376
|
+
* console.log(ranking.first()?.name); // 'Charlie';
|
|
3377
|
+
*
|
|
3378
|
+
* // Filter students with GPA >= 3.8
|
|
3379
|
+
* const honors = ranking.filter(s => s.gpa >= 3.8);
|
|
3380
|
+
* console.log(honors.toArray().map(s => s.name)); // ['Charlie', 'Alice'];
|
|
3381
|
+
*/
|
|
3382
|
+
first(): K | undefined;
|
|
3383
|
+
/**
|
|
3384
|
+
* Largest key in the set.
|
|
3385
|
+
|
|
3386
|
+
|
|
3387
|
+
|
|
3388
|
+
|
|
3389
|
+
|
|
3390
|
+
|
|
3391
|
+
|
|
3392
|
+
|
|
3393
|
+
|
|
3394
|
+
|
|
3395
|
+
|
|
3396
|
+
|
|
3397
|
+
|
|
3398
|
+
|
|
3399
|
+
|
|
3400
|
+
|
|
3401
|
+
|
|
3402
|
+
|
|
3403
|
+
|
|
3404
|
+
|
|
3405
|
+
|
|
3406
|
+
|
|
3407
|
+
|
|
3408
|
+
|
|
3409
|
+
|
|
3410
|
+
|
|
3411
|
+
|
|
3412
|
+
|
|
3413
|
+
|
|
3414
|
+
|
|
3415
|
+
|
|
3416
|
+
|
|
3417
|
+
|
|
3418
|
+
|
|
3419
|
+
|
|
3420
|
+
|
|
3421
|
+
|
|
3422
|
+
|
|
3423
|
+
|
|
3424
|
+
* @example
|
|
3425
|
+
* // Get the maximum element
|
|
3426
|
+
* const temps = new TreeSet<number>([18, 22, 15, 30, 25]);
|
|
3427
|
+
* console.log(temps.last()); // 30;
|
|
3428
|
+
* console.log(temps.first()); // 15;
|
|
3429
|
+
*/
|
|
3430
|
+
last(): K | undefined;
|
|
3431
|
+
/**
|
|
3432
|
+
* Remove and return the smallest key.
|
|
3433
|
+
|
|
3434
|
+
|
|
3435
|
+
|
|
3436
|
+
|
|
3437
|
+
|
|
3438
|
+
|
|
3439
|
+
|
|
3440
|
+
|
|
3441
|
+
|
|
3442
|
+
|
|
3443
|
+
|
|
3444
|
+
|
|
3445
|
+
|
|
3446
|
+
|
|
3447
|
+
|
|
3448
|
+
|
|
3449
|
+
|
|
3450
|
+
|
|
3451
|
+
|
|
3452
|
+
|
|
3453
|
+
|
|
3454
|
+
|
|
3455
|
+
|
|
3456
|
+
|
|
3457
|
+
|
|
3458
|
+
|
|
3459
|
+
|
|
3460
|
+
|
|
3461
|
+
|
|
3462
|
+
|
|
3463
|
+
|
|
3464
|
+
|
|
3465
|
+
|
|
3466
|
+
|
|
3467
|
+
|
|
3468
|
+
|
|
3469
|
+
|
|
3470
|
+
|
|
3471
|
+
|
|
3472
|
+
* @example
|
|
3473
|
+
* // Remove and return minimum
|
|
3474
|
+
* const queue = new TreeSet<number>([5, 1, 8, 3]);
|
|
3475
|
+
*
|
|
3476
|
+
* console.log(queue.pollFirst()); // 1;
|
|
3477
|
+
* console.log(queue.pollFirst()); // 3;
|
|
3478
|
+
* console.log(queue.size); // 2;
|
|
3479
|
+
*/
|
|
3480
|
+
pollFirst(): K | undefined;
|
|
3481
|
+
/**
|
|
3482
|
+
* Remove and return the largest key.
|
|
3483
|
+
|
|
3484
|
+
|
|
3485
|
+
|
|
3486
|
+
|
|
3487
|
+
|
|
3488
|
+
|
|
3489
|
+
|
|
3490
|
+
|
|
3491
|
+
|
|
3492
|
+
|
|
3493
|
+
|
|
3494
|
+
|
|
3495
|
+
|
|
3496
|
+
|
|
3497
|
+
|
|
3498
|
+
|
|
3499
|
+
|
|
3500
|
+
|
|
3501
|
+
|
|
3502
|
+
|
|
3503
|
+
|
|
3504
|
+
|
|
3505
|
+
|
|
3506
|
+
|
|
3507
|
+
|
|
3508
|
+
|
|
3509
|
+
|
|
3510
|
+
|
|
3511
|
+
|
|
3512
|
+
|
|
3513
|
+
|
|
3514
|
+
|
|
3515
|
+
|
|
3516
|
+
|
|
3517
|
+
|
|
3518
|
+
|
|
3519
|
+
|
|
3520
|
+
|
|
3521
|
+
|
|
3522
|
+
* @example
|
|
3523
|
+
* // Remove and return maximum
|
|
3524
|
+
* const stack = new TreeSet<number>([10, 20, 30]);
|
|
3525
|
+
*
|
|
3526
|
+
* console.log(stack.pollLast()); // 30;
|
|
3527
|
+
* console.log(stack.size); // 2;
|
|
3528
|
+
*/
|
|
3529
|
+
pollLast(): K | undefined;
|
|
3530
|
+
/**
|
|
3531
|
+
* Smallest key that is >= the given key.
|
|
3532
|
+
|
|
3533
|
+
|
|
3534
|
+
|
|
3535
|
+
|
|
3536
|
+
|
|
3537
|
+
|
|
3538
|
+
|
|
3539
|
+
|
|
3540
|
+
|
|
3541
|
+
|
|
3542
|
+
|
|
3543
|
+
|
|
3544
|
+
|
|
3545
|
+
|
|
3546
|
+
|
|
3547
|
+
|
|
3548
|
+
|
|
3549
|
+
|
|
3550
|
+
|
|
3551
|
+
|
|
3552
|
+
|
|
3553
|
+
|
|
3554
|
+
|
|
3555
|
+
|
|
3556
|
+
|
|
3557
|
+
|
|
3558
|
+
|
|
3559
|
+
|
|
3560
|
+
|
|
3561
|
+
|
|
3562
|
+
|
|
3563
|
+
|
|
3564
|
+
|
|
3565
|
+
|
|
3566
|
+
|
|
3567
|
+
|
|
3568
|
+
|
|
3569
|
+
|
|
3570
|
+
|
|
3571
|
+
|
|
3572
|
+
|
|
3573
|
+
|
|
3574
|
+
|
|
3575
|
+
|
|
3576
|
+
|
|
3577
|
+
|
|
3578
|
+
|
|
3579
|
+
|
|
3580
|
+
|
|
3581
|
+
|
|
3582
|
+
|
|
3583
|
+
|
|
3584
|
+
|
|
3585
|
+
|
|
3586
|
+
|
|
3587
|
+
|
|
3588
|
+
|
|
3589
|
+
|
|
3590
|
+
|
|
3591
|
+
|
|
3592
|
+
|
|
3593
|
+
|
|
3594
|
+
|
|
3595
|
+
|
|
3596
|
+
|
|
3597
|
+
|
|
3598
|
+
|
|
3599
|
+
|
|
3600
|
+
|
|
3601
|
+
|
|
3602
|
+
|
|
3603
|
+
|
|
3604
|
+
|
|
3605
|
+
|
|
3606
|
+
|
|
3607
|
+
|
|
3608
|
+
|
|
3609
|
+
|
|
3610
|
+
|
|
3611
|
+
|
|
3612
|
+
|
|
3613
|
+
|
|
3614
|
+
|
|
3615
|
+
|
|
3616
|
+
|
|
3617
|
+
|
|
3618
|
+
|
|
3619
|
+
|
|
3620
|
+
|
|
3621
|
+
|
|
3622
|
+
|
|
3623
|
+
|
|
3624
|
+
|
|
3625
|
+
|
|
3626
|
+
|
|
3627
|
+
|
|
3628
|
+
|
|
3629
|
+
|
|
3630
|
+
|
|
3631
|
+
|
|
3632
|
+
|
|
3633
|
+
|
|
3634
|
+
|
|
3635
|
+
|
|
3636
|
+
|
|
3637
|
+
|
|
3638
|
+
|
|
3639
|
+
|
|
3640
|
+
|
|
3641
|
+
|
|
3642
|
+
|
|
3643
|
+
|
|
3644
|
+
|
|
3645
|
+
|
|
3646
|
+
|
|
3647
|
+
|
|
3648
|
+
|
|
3649
|
+
|
|
3650
|
+
|
|
3651
|
+
|
|
3652
|
+
|
|
3653
|
+
|
|
3654
|
+
|
|
3655
|
+
|
|
3656
|
+
|
|
3657
|
+
|
|
3658
|
+
|
|
3659
|
+
|
|
3660
|
+
|
|
3661
|
+
|
|
3662
|
+
|
|
3663
|
+
|
|
3664
|
+
|
|
3665
|
+
|
|
3666
|
+
|
|
3667
|
+
|
|
3668
|
+
|
|
3669
|
+
|
|
3670
|
+
|
|
3671
|
+
|
|
3672
|
+
|
|
3673
|
+
|
|
3674
|
+
|
|
3675
|
+
|
|
3676
|
+
|
|
3677
|
+
|
|
3678
|
+
|
|
3679
|
+
|
|
3680
|
+
|
|
3681
|
+
|
|
3682
|
+
* @example
|
|
3683
|
+
* // Finding nearest available time slot
|
|
3684
|
+
* // Available appointment times (minutes from midnight)
|
|
3685
|
+
* const slots = new TreeSet<number>([540, 600, 660, 720, 840, 900]);
|
|
3686
|
+
*
|
|
3687
|
+
* // Customer wants something around 10:30 (630 min)
|
|
3688
|
+
* const nearest = slots.ceiling(630);
|
|
3689
|
+
* console.log(nearest); // 660; // 11:00 AM
|
|
3690
|
+
*
|
|
3691
|
+
* // What's the latest slot before 2:00 PM (840)?
|
|
3692
|
+
* const before2pm = slots.lower(840);
|
|
3693
|
+
* console.log(before2pm); // 720; // 12:00 PM
|
|
3694
|
+
*
|
|
3695
|
+
* // Book the 11:00 slot
|
|
3696
|
+
* slots.delete(660);
|
|
3697
|
+
* console.log(slots.ceiling(630)); // 720;
|
|
3698
|
+
*/
|
|
3699
|
+
ceiling(key: K): K | undefined;
|
|
3700
|
+
/**
|
|
3701
|
+
* Largest key that is <= the given key.
|
|
3702
|
+
|
|
3703
|
+
|
|
3704
|
+
|
|
3705
|
+
|
|
3706
|
+
|
|
3707
|
+
|
|
3708
|
+
|
|
3709
|
+
|
|
3710
|
+
|
|
3711
|
+
|
|
3712
|
+
|
|
3713
|
+
|
|
3714
|
+
|
|
3715
|
+
|
|
3716
|
+
|
|
3717
|
+
|
|
3718
|
+
|
|
3719
|
+
|
|
3720
|
+
|
|
3721
|
+
|
|
3722
|
+
|
|
3723
|
+
|
|
3724
|
+
|
|
3725
|
+
|
|
3726
|
+
|
|
3727
|
+
|
|
3728
|
+
|
|
3729
|
+
|
|
3730
|
+
|
|
3731
|
+
|
|
3732
|
+
|
|
3733
|
+
|
|
3734
|
+
|
|
3735
|
+
|
|
3736
|
+
|
|
3737
|
+
|
|
3738
|
+
|
|
3739
|
+
|
|
3740
|
+
|
|
3741
|
+
|
|
3742
|
+
|
|
3743
|
+
|
|
3744
|
+
|
|
3745
|
+
|
|
3746
|
+
|
|
3747
|
+
|
|
3748
|
+
|
|
3749
|
+
|
|
3750
|
+
|
|
3751
|
+
|
|
3752
|
+
|
|
3753
|
+
|
|
3754
|
+
|
|
3755
|
+
|
|
3756
|
+
|
|
3757
|
+
|
|
3758
|
+
|
|
3759
|
+
|
|
3760
|
+
|
|
3761
|
+
|
|
3762
|
+
|
|
3763
|
+
|
|
3764
|
+
|
|
3765
|
+
|
|
3766
|
+
|
|
3767
|
+
|
|
3768
|
+
|
|
3769
|
+
|
|
3770
|
+
|
|
3771
|
+
|
|
3772
|
+
|
|
3773
|
+
|
|
3774
|
+
|
|
3775
|
+
|
|
3776
|
+
|
|
3777
|
+
|
|
3778
|
+
|
|
3779
|
+
|
|
3780
|
+
|
|
3781
|
+
|
|
3782
|
+
|
|
3783
|
+
|
|
3784
|
+
|
|
3785
|
+
|
|
3786
|
+
|
|
3787
|
+
|
|
3788
|
+
|
|
3789
|
+
|
|
3790
|
+
|
|
3791
|
+
|
|
3792
|
+
|
|
3793
|
+
|
|
3794
|
+
|
|
3795
|
+
|
|
3796
|
+
|
|
3797
|
+
|
|
3798
|
+
|
|
3799
|
+
|
|
3800
|
+
|
|
3801
|
+
|
|
3802
|
+
|
|
3803
|
+
|
|
3804
|
+
|
|
3805
|
+
|
|
3806
|
+
|
|
3807
|
+
|
|
3808
|
+
|
|
3809
|
+
|
|
3810
|
+
|
|
3811
|
+
|
|
3812
|
+
|
|
3813
|
+
|
|
3814
|
+
|
|
3815
|
+
|
|
3816
|
+
|
|
3817
|
+
|
|
3818
|
+
|
|
3819
|
+
|
|
3820
|
+
|
|
3821
|
+
|
|
3822
|
+
|
|
3823
|
+
|
|
3824
|
+
|
|
3825
|
+
|
|
3826
|
+
|
|
3827
|
+
|
|
3828
|
+
|
|
3829
|
+
|
|
3830
|
+
|
|
3831
|
+
|
|
3832
|
+
|
|
3833
|
+
|
|
3834
|
+
|
|
3835
|
+
|
|
3836
|
+
|
|
3837
|
+
|
|
3838
|
+
|
|
3839
|
+
|
|
3840
|
+
|
|
3841
|
+
|
|
3842
|
+
|
|
3843
|
+
|
|
3844
|
+
|
|
3845
|
+
|
|
3846
|
+
|
|
3847
|
+
|
|
3848
|
+
|
|
3849
|
+
|
|
3850
|
+
|
|
3851
|
+
|
|
3852
|
+
* @example
|
|
3853
|
+
* // Largest element ≤ target
|
|
3854
|
+
* const breakpoints = new TreeSet<number>([320, 768, 1024, 1280, 1920]);
|
|
3855
|
+
*
|
|
3856
|
+
* // Current width is 800 → which breakpoint applies?
|
|
3857
|
+
* console.log(breakpoints.floor(800)); // 768;
|
|
3858
|
+
* console.log(breakpoints.floor(1024)); // 1024; // exact match
|
|
3859
|
+
* console.log(breakpoints.floor(100)); // undefined;
|
|
3860
|
+
*/
|
|
3861
|
+
floor(key: K): K | undefined;
|
|
3862
|
+
/**
|
|
3863
|
+
* Smallest key that is > the given key.
|
|
3864
|
+
|
|
3865
|
+
|
|
3866
|
+
|
|
3867
|
+
|
|
3868
|
+
|
|
3869
|
+
|
|
3870
|
+
|
|
3871
|
+
|
|
3872
|
+
|
|
3873
|
+
|
|
3874
|
+
|
|
3875
|
+
|
|
3876
|
+
|
|
3877
|
+
|
|
3878
|
+
|
|
3879
|
+
|
|
3880
|
+
|
|
3881
|
+
|
|
3882
|
+
|
|
3883
|
+
|
|
3884
|
+
|
|
3885
|
+
|
|
3886
|
+
|
|
3887
|
+
|
|
3888
|
+
|
|
3889
|
+
|
|
3890
|
+
|
|
3891
|
+
|
|
3892
|
+
|
|
3893
|
+
|
|
3894
|
+
|
|
3895
|
+
|
|
3896
|
+
|
|
3897
|
+
|
|
3898
|
+
|
|
3899
|
+
|
|
3900
|
+
|
|
3901
|
+
|
|
3902
|
+
|
|
3903
|
+
|
|
3904
|
+
|
|
3905
|
+
|
|
3906
|
+
|
|
3907
|
+
|
|
3908
|
+
|
|
3909
|
+
|
|
3910
|
+
|
|
3911
|
+
|
|
3912
|
+
|
|
3913
|
+
|
|
3914
|
+
|
|
3915
|
+
|
|
3916
|
+
|
|
3917
|
+
|
|
3918
|
+
|
|
3919
|
+
|
|
3920
|
+
|
|
3921
|
+
|
|
3922
|
+
|
|
3923
|
+
|
|
3924
|
+
|
|
3925
|
+
|
|
3926
|
+
|
|
3927
|
+
|
|
3928
|
+
|
|
3929
|
+
|
|
3930
|
+
|
|
3931
|
+
|
|
3932
|
+
|
|
3933
|
+
|
|
3934
|
+
|
|
3935
|
+
|
|
3936
|
+
|
|
3937
|
+
|
|
3938
|
+
|
|
3939
|
+
|
|
3940
|
+
|
|
3941
|
+
|
|
3942
|
+
|
|
3943
|
+
|
|
3944
|
+
|
|
3945
|
+
|
|
3946
|
+
|
|
3947
|
+
|
|
3948
|
+
|
|
3949
|
+
|
|
3950
|
+
|
|
3951
|
+
|
|
3952
|
+
|
|
3953
|
+
|
|
3954
|
+
|
|
3955
|
+
|
|
3956
|
+
|
|
3957
|
+
|
|
3958
|
+
|
|
3959
|
+
|
|
3960
|
+
|
|
3961
|
+
|
|
3962
|
+
|
|
3963
|
+
|
|
3964
|
+
|
|
3965
|
+
|
|
3966
|
+
|
|
3967
|
+
|
|
3968
|
+
|
|
3969
|
+
|
|
3970
|
+
|
|
3971
|
+
|
|
3972
|
+
|
|
3973
|
+
|
|
3974
|
+
|
|
3975
|
+
|
|
3976
|
+
|
|
3977
|
+
|
|
3978
|
+
|
|
3979
|
+
|
|
3980
|
+
|
|
3981
|
+
|
|
3982
|
+
|
|
3983
|
+
|
|
3984
|
+
|
|
3985
|
+
|
|
3986
|
+
|
|
3987
|
+
|
|
3988
|
+
|
|
3989
|
+
|
|
3990
|
+
|
|
3991
|
+
|
|
3992
|
+
|
|
3993
|
+
|
|
3994
|
+
|
|
3995
|
+
|
|
3996
|
+
|
|
3997
|
+
|
|
3998
|
+
|
|
3999
|
+
|
|
4000
|
+
|
|
4001
|
+
|
|
4002
|
+
|
|
4003
|
+
|
|
4004
|
+
|
|
4005
|
+
|
|
4006
|
+
|
|
4007
|
+
|
|
4008
|
+
|
|
4009
|
+
|
|
4010
|
+
|
|
4011
|
+
|
|
4012
|
+
|
|
4013
|
+
|
|
4014
|
+
* @example
|
|
4015
|
+
* // Smallest element strictly > target
|
|
4016
|
+
* const levels = new TreeSet<number>([1, 5, 10, 25, 50, 100]);
|
|
4017
|
+
*
|
|
4018
|
+
* console.log(levels.higher(10)); // 25;
|
|
4019
|
+
* console.log(levels.higher(100)); // undefined;
|
|
4020
|
+
*/
|
|
4021
|
+
higher(key: K): K | undefined;
|
|
4022
|
+
/**
|
|
4023
|
+
* Largest key that is < the given key.
|
|
4024
|
+
|
|
4025
|
+
|
|
4026
|
+
|
|
4027
|
+
|
|
4028
|
+
|
|
4029
|
+
|
|
4030
|
+
|
|
4031
|
+
|
|
4032
|
+
|
|
4033
|
+
|
|
4034
|
+
|
|
4035
|
+
|
|
4036
|
+
|
|
4037
|
+
|
|
4038
|
+
|
|
4039
|
+
|
|
4040
|
+
|
|
4041
|
+
|
|
4042
|
+
|
|
4043
|
+
|
|
4044
|
+
|
|
4045
|
+
|
|
4046
|
+
|
|
4047
|
+
|
|
4048
|
+
|
|
4049
|
+
|
|
4050
|
+
|
|
4051
|
+
|
|
4052
|
+
|
|
4053
|
+
|
|
4054
|
+
|
|
4055
|
+
|
|
4056
|
+
|
|
4057
|
+
|
|
4058
|
+
|
|
4059
|
+
|
|
4060
|
+
|
|
4061
|
+
|
|
4062
|
+
|
|
4063
|
+
|
|
4064
|
+
|
|
4065
|
+
|
|
4066
|
+
|
|
4067
|
+
|
|
4068
|
+
|
|
4069
|
+
|
|
4070
|
+
|
|
4071
|
+
|
|
4072
|
+
|
|
4073
|
+
|
|
4074
|
+
|
|
4075
|
+
|
|
4076
|
+
|
|
4077
|
+
|
|
4078
|
+
|
|
4079
|
+
|
|
4080
|
+
|
|
4081
|
+
|
|
4082
|
+
|
|
4083
|
+
|
|
4084
|
+
|
|
4085
|
+
|
|
4086
|
+
|
|
4087
|
+
|
|
4088
|
+
|
|
4089
|
+
|
|
4090
|
+
|
|
4091
|
+
|
|
4092
|
+
|
|
4093
|
+
|
|
4094
|
+
|
|
4095
|
+
|
|
4096
|
+
|
|
4097
|
+
|
|
4098
|
+
|
|
4099
|
+
|
|
4100
|
+
|
|
4101
|
+
|
|
4102
|
+
|
|
4103
|
+
|
|
4104
|
+
|
|
4105
|
+
|
|
4106
|
+
|
|
4107
|
+
|
|
4108
|
+
|
|
4109
|
+
|
|
4110
|
+
|
|
4111
|
+
|
|
4112
|
+
|
|
4113
|
+
|
|
4114
|
+
|
|
4115
|
+
|
|
4116
|
+
|
|
4117
|
+
|
|
4118
|
+
|
|
4119
|
+
|
|
4120
|
+
|
|
4121
|
+
|
|
4122
|
+
|
|
4123
|
+
|
|
4124
|
+
|
|
4125
|
+
|
|
4126
|
+
|
|
4127
|
+
|
|
4128
|
+
|
|
4129
|
+
|
|
4130
|
+
|
|
4131
|
+
|
|
4132
|
+
|
|
4133
|
+
|
|
4134
|
+
|
|
4135
|
+
|
|
4136
|
+
|
|
4137
|
+
|
|
4138
|
+
|
|
4139
|
+
|
|
4140
|
+
|
|
4141
|
+
|
|
4142
|
+
|
|
4143
|
+
|
|
4144
|
+
|
|
4145
|
+
|
|
4146
|
+
|
|
4147
|
+
|
|
4148
|
+
|
|
4149
|
+
|
|
4150
|
+
|
|
4151
|
+
|
|
4152
|
+
|
|
4153
|
+
|
|
4154
|
+
|
|
4155
|
+
|
|
4156
|
+
|
|
4157
|
+
|
|
4158
|
+
|
|
4159
|
+
|
|
4160
|
+
|
|
4161
|
+
|
|
4162
|
+
|
|
4163
|
+
|
|
4164
|
+
|
|
4165
|
+
|
|
4166
|
+
|
|
4167
|
+
|
|
4168
|
+
|
|
4169
|
+
|
|
4170
|
+
|
|
4171
|
+
|
|
4172
|
+
|
|
4173
|
+
|
|
4174
|
+
* @example
|
|
4175
|
+
* // Largest element strictly < target
|
|
4176
|
+
* const tiers = new TreeSet<number>([100, 200, 500, 1000]);
|
|
4177
|
+
*
|
|
4178
|
+
* console.log(tiers.lower(500)); // 200;
|
|
4179
|
+
* console.log(tiers.lower(100)); // undefined;
|
|
4180
|
+
*/
|
|
4181
|
+
lower(key: K): K | undefined;
|
|
4182
|
+
/**
|
|
4183
|
+
* Return all keys in a given range.
|
|
4184
|
+
*
|
|
4185
|
+
* @param range `[low, high]`
|
|
4186
|
+
* @param options Inclusive/exclusive bounds (defaults to inclusive).
|
|
4187
|
+
|
|
4188
|
+
|
|
4189
|
+
|
|
4190
|
+
|
|
4191
|
+
|
|
4192
|
+
|
|
4193
|
+
|
|
4194
|
+
|
|
4195
|
+
|
|
4196
|
+
|
|
4197
|
+
|
|
4198
|
+
|
|
4199
|
+
|
|
4200
|
+
|
|
4201
|
+
|
|
4202
|
+
|
|
4203
|
+
|
|
4204
|
+
|
|
4205
|
+
|
|
4206
|
+
|
|
4207
|
+
|
|
4208
|
+
|
|
4209
|
+
|
|
4210
|
+
|
|
4211
|
+
|
|
4212
|
+
|
|
4213
|
+
|
|
4214
|
+
|
|
4215
|
+
|
|
4216
|
+
|
|
4217
|
+
|
|
4218
|
+
|
|
4219
|
+
|
|
4220
|
+
|
|
4221
|
+
|
|
4222
|
+
|
|
4223
|
+
|
|
4224
|
+
|
|
4225
|
+
|
|
4226
|
+
|
|
4227
|
+
|
|
4228
|
+
|
|
4229
|
+
|
|
4230
|
+
|
|
4231
|
+
|
|
4232
|
+
|
|
4233
|
+
|
|
4234
|
+
|
|
4235
|
+
|
|
4236
|
+
|
|
4237
|
+
|
|
4238
|
+
|
|
4239
|
+
|
|
4240
|
+
|
|
4241
|
+
|
|
4242
|
+
|
|
4243
|
+
|
|
4244
|
+
|
|
4245
|
+
|
|
4246
|
+
|
|
4247
|
+
|
|
4248
|
+
|
|
4249
|
+
|
|
4250
|
+
|
|
4251
|
+
|
|
4252
|
+
|
|
4253
|
+
|
|
4254
|
+
|
|
4255
|
+
|
|
4256
|
+
|
|
4257
|
+
|
|
4258
|
+
|
|
4259
|
+
|
|
4260
|
+
|
|
4261
|
+
|
|
4262
|
+
|
|
4263
|
+
|
|
4264
|
+
|
|
4265
|
+
|
|
4266
|
+
|
|
4267
|
+
|
|
4268
|
+
|
|
4269
|
+
|
|
4270
|
+
|
|
4271
|
+
|
|
4272
|
+
|
|
4273
|
+
|
|
4274
|
+
|
|
4275
|
+
|
|
4276
|
+
|
|
4277
|
+
|
|
4278
|
+
|
|
4279
|
+
|
|
4280
|
+
|
|
4281
|
+
|
|
4282
|
+
|
|
4283
|
+
|
|
4284
|
+
|
|
4285
|
+
|
|
4286
|
+
|
|
4287
|
+
|
|
4288
|
+
|
|
4289
|
+
|
|
4290
|
+
|
|
4291
|
+
|
|
4292
|
+
|
|
4293
|
+
|
|
4294
|
+
|
|
4295
|
+
|
|
4296
|
+
|
|
4297
|
+
|
|
4298
|
+
|
|
4299
|
+
|
|
4300
|
+
|
|
4301
|
+
|
|
4302
|
+
|
|
4303
|
+
|
|
4304
|
+
|
|
4305
|
+
|
|
4306
|
+
|
|
4307
|
+
|
|
4308
|
+
|
|
4309
|
+
|
|
4310
|
+
|
|
4311
|
+
|
|
4312
|
+
|
|
4313
|
+
|
|
4314
|
+
|
|
4315
|
+
|
|
4316
|
+
|
|
4317
|
+
|
|
4318
|
+
|
|
4319
|
+
|
|
4320
|
+
|
|
4321
|
+
|
|
4322
|
+
|
|
4323
|
+
|
|
4324
|
+
|
|
4325
|
+
|
|
4326
|
+
|
|
4327
|
+
|
|
4328
|
+
|
|
4329
|
+
|
|
4330
|
+
|
|
4331
|
+
|
|
4332
|
+
|
|
4333
|
+
|
|
4334
|
+
|
|
4335
|
+
|
|
4336
|
+
|
|
4337
|
+
* @example
|
|
4338
|
+
* // IP address blocklist with range checking
|
|
4339
|
+
* // Simplified: use numeric IP representation
|
|
4340
|
+
* const blocklist = new TreeSet<number>([
|
|
4341
|
+
* 167772160, // 10.0.0.0
|
|
4342
|
+
* 167772416, // 10.0.1.0
|
|
4343
|
+
* 167772672, // 10.0.2.0
|
|
4344
|
+
* 167773184 // 10.0.4.0
|
|
4345
|
+
* ]);
|
|
4346
|
+
*
|
|
4347
|
+
* // Check if any blocked IP is in range 10.0.1.0 - 10.0.3.0
|
|
4348
|
+
* const inRange = blocklist.rangeSearch([167772416, 167772928]);
|
|
4349
|
+
* console.log(inRange); // [167772416, 167772672];
|
|
4350
|
+
*
|
|
4351
|
+
* // Quick membership check
|
|
4352
|
+
* console.log(blocklist.has(167772416)); // true;
|
|
4353
|
+
* console.log(blocklist.has(167772800)); // false;
|
|
4354
|
+
*/
|
|
4355
|
+
rangeSearch(range: [K, K], options?: TreeSetRangeOptions): K[];
|
|
4356
|
+
/**
|
|
4357
|
+
* Returns the element at the k-th position in tree order (0-indexed).
|
|
4358
|
+
* @remarks Time O(log n). Requires `enableOrderStatistic: true`.
|
|
4359
|
+
|
|
4360
|
+
|
|
4361
|
+
|
|
4362
|
+
* @example
|
|
4363
|
+
* // Find k-th element in a TreeSet
|
|
4364
|
+
* const set = new TreeSet<number>([30, 10, 50, 20, 40], { enableOrderStatistic: true });
|
|
4365
|
+
* console.log(set.getByRank(0)); // 10;
|
|
4366
|
+
* console.log(set.getByRank(2)); // 30;
|
|
4367
|
+
* console.log(set.getRank(30)); // 2;
|
|
4368
|
+
*/
|
|
4369
|
+
getByRank(k: number): K | undefined;
|
|
4370
|
+
/**
|
|
4371
|
+
* Returns the 0-based rank of a key (number of elements that precede it in tree order).
|
|
4372
|
+
* @remarks Time O(log n). Requires `enableOrderStatistic: true`.
|
|
4373
|
+
* @example
|
|
4374
|
+
* // Get the rank of a key in sorted order
|
|
4375
|
+
* const tree = new TreeSet<number>(
|
|
4376
|
+
* [10, 20, 30, 40, 50],
|
|
4377
|
+
* { enableOrderStatistic: true }
|
|
4378
|
+
* );
|
|
4379
|
+
* console.log(tree.getRank(10)); // 0; // smallest → rank 0
|
|
4380
|
+
* console.log(tree.getRank(30)); // 2; // 2 elements before 30 in tree order
|
|
4381
|
+
* console.log(tree.getRank(50)); // 4; // largest → rank 4
|
|
4382
|
+
* console.log(tree.getRank(25)); // 2;
|
|
4383
|
+
*/
|
|
4384
|
+
getRank(key: K): number;
|
|
4385
|
+
/**
|
|
4386
|
+
* Returns elements by rank range (0-indexed, inclusive on both ends).
|
|
4387
|
+
* @remarks Time O(log n + k). Requires `enableOrderStatistic: true`.
|
|
4388
|
+
|
|
4389
|
+
|
|
4390
|
+
|
|
4391
|
+
|
|
4392
|
+
|
|
4393
|
+
|
|
4394
|
+
|
|
4395
|
+
|
|
4396
|
+
|
|
4397
|
+
* @example
|
|
4398
|
+
* // Pagination by position in tree order
|
|
4399
|
+
* const tree = new TreeSet<number>(
|
|
4400
|
+
* [10, 20, 30, 40, 50, 60, 70, 80, 90],
|
|
4401
|
+
* { enableOrderStatistic: true }
|
|
4402
|
+
* );
|
|
4403
|
+
* const pageSize = 3;
|
|
4404
|
+
*
|
|
4405
|
+
* // Page 1
|
|
4406
|
+
* console.log(tree.rangeByRank(0, pageSize - 1)); // [10, 20, 30];
|
|
4407
|
+
* // Page 2
|
|
4408
|
+
* console.log(tree.rangeByRank(pageSize, 2 * pageSize - 1)); // [40, 50, 60];
|
|
4409
|
+
* // Page 3
|
|
4410
|
+
* console.log(tree.rangeByRank(2 * pageSize, 3 * pageSize - 1)); // [70, 80, 90];
|
|
4411
|
+
*/
|
|
4412
|
+
rangeByRank(start: number, end: number): K[];
|
|
4413
|
+
/**
|
|
4414
|
+
* Creates a shallow clone of this set.
|
|
4415
|
+
* @remarks Time O(n log n), Space O(n)
|
|
4416
|
+
|
|
4417
|
+
|
|
4418
|
+
|
|
4419
|
+
|
|
4420
|
+
|
|
4421
|
+
|
|
4422
|
+
|
|
4423
|
+
|
|
4424
|
+
|
|
4425
|
+
|
|
4426
|
+
|
|
4427
|
+
|
|
4428
|
+
|
|
4429
|
+
|
|
4430
|
+
|
|
4431
|
+
|
|
4432
|
+
|
|
4433
|
+
|
|
4434
|
+
|
|
4435
|
+
|
|
4436
|
+
|
|
4437
|
+
|
|
4438
|
+
|
|
4439
|
+
|
|
4440
|
+
|
|
4441
|
+
|
|
4442
|
+
|
|
4443
|
+
|
|
4444
|
+
|
|
4445
|
+
|
|
4446
|
+
|
|
4447
|
+
|
|
4448
|
+
|
|
4449
|
+
|
|
4450
|
+
|
|
4451
|
+
|
|
4452
|
+
|
|
4453
|
+
|
|
4454
|
+
|
|
4455
|
+
|
|
4456
|
+
|
|
3453
4457
|
|
|
3454
4458
|
|
|
3455
4459
|
|