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