File tree Expand file tree Collapse file tree 4 files changed +134
-0
lines changed
find-median-from-data-stream
kth-smallest-element-in-a-bst
lowest-common-ancestor-of-a-binary-search-tree Expand file tree Collapse file tree 4 files changed +134
-0
lines changed Original file line number Diff line number Diff line change
1
+ class MedianFinder {
2
+ arr : number [ ]
3
+ constructor ( ) {
4
+ this . arr = [ ]
5
+ }
6
+ /*
7
+ Time Complexity: O(logn)
8
+ Space Complexity: O(n)
9
+ */
10
+ addNum ( num : number ) : void {
11
+ let left = 0
12
+ let right = this . arr . length
13
+
14
+ while ( left < right ) {
15
+ const mid = Math . floor ( ( left + right ) / 2 )
16
+ if ( this . arr [ mid ] < num ) {
17
+ left = mid + 1
18
+ } else {
19
+ right = mid
20
+ }
21
+ }
22
+ this . arr . splice ( left , 0 , num )
23
+ }
24
+ /*
25
+ Time Complexity: O(1)
26
+ Space Complexity: O(n)
27
+ */
28
+ findMedian ( ) : number {
29
+ const n = this . arr . length
30
+ if ( n % 2 === 0 ) {
31
+ return ( this . arr [ n / 2 - 1 ] + this . arr [ n / 2 ] ) / 2
32
+ } else {
33
+ return ( this . arr [ Math . floor ( n / 2 ) ] )
34
+ }
35
+ }
36
+ }
37
+
38
+ /**
39
+ * Your MedianFinder object will be instantiated and called as such:
40
+ * var obj = new MedianFinder()
41
+ * obj.addNum(num)
42
+ * var param_2 = obj.findMedian()
43
+ */
Original file line number Diff line number Diff line change
1
+ /*
2
+ Time Complexity: O(n)
3
+ Space Complexity: O(n)
4
+ */
5
+ function insert ( intervals : number [ ] [ ] , newInterval : number [ ] ) : number [ ] [ ] {
6
+ const newIntervals = [ ]
7
+ let idx = 0
8
+ const n = intervals . length
9
+ while ( idx < n && intervals [ idx ] [ 1 ] < newInterval [ 0 ] ) {
10
+ newIntervals . push ( intervals [ idx ] )
11
+ idx ++
12
+ }
13
+
14
+ while ( idx < n && intervals [ idx ] [ 0 ] <= newInterval [ 1 ] ) {
15
+ newInterval [ 0 ] = Math . min ( newInterval [ 0 ] , intervals [ idx ] [ 0 ] )
16
+ newInterval [ 1 ] = Math . max ( newInterval [ 1 ] , intervals [ idx ] [ 1 ] )
17
+ idx ++
18
+ }
19
+ newIntervals . push ( newInterval )
20
+
21
+ while ( idx < n ) {
22
+ newIntervals . push ( intervals [ idx ] )
23
+ idx ++
24
+ }
25
+ return newIntervals
26
+ } ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * Definition for a binary tree node.
3
+ * class TreeNode {
4
+ * val: number
5
+ * left: TreeNode | null
6
+ * right: TreeNode | null
7
+ * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8
+ * this.val = (val===undefined ? 0 : val)
9
+ * this.left = (left===undefined ? null : left)
10
+ * this.right = (right===undefined ? null : right)
11
+ * }
12
+ * }
13
+ */
14
+ /*
15
+ Time Complexity: O(h + k)
16
+ Space Complexity: O(h)
17
+ */
18
+ function kthSmallest ( root : TreeNode | null , k : number ) : number {
19
+ let count = 0
20
+ let result = - 1
21
+ const inOrder = ( node : TreeNode | null ) : void => {
22
+ if ( node == null || count >= k ) return
23
+
24
+ inOrder ( node . left )
25
+ count ++
26
+ if ( count === k ) {
27
+ result = node . val
28
+ return
29
+ }
30
+ inOrder ( node . right )
31
+ }
32
+ inOrder ( root )
33
+ return result
34
+ } ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * Definition for a binary tree node.
3
+ * class TreeNode {
4
+ * val: number
5
+ * left: TreeNode | null
6
+ * right: TreeNode | null
7
+ * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8
+ * this.val = (val===undefined ? 0 : val)
9
+ * this.left = (left===undefined ? null : left)
10
+ * this.right = (right===undefined ? null : right)
11
+ * }
12
+ * }
13
+ */
14
+ /*
15
+ Time Complexity: O(logn)
16
+ Space Complexity: O(1)
17
+ */
18
+ function lowestCommonAncestor ( root : TreeNode | null , p : TreeNode | null , q : TreeNode | null ) : TreeNode | null {
19
+ if ( ! root || ! p || ! q ) return null ;
20
+ let node = root
21
+ while ( node ) {
22
+ if ( p . val < node . val && q . val < node . val ) {
23
+ node = node . left
24
+ } else if ( p . val > node . val && q . val > node . val ) {
25
+ node = node . right
26
+ } else {
27
+ return node
28
+ }
29
+ }
30
+ return null
31
+ } ;
You can’t perform that action at this time.
0 commit comments