File tree Expand file tree Collapse file tree 4 files changed +113
-0
lines changed Top Open diff view settings
best-time-to-buy-and-sell-stock
implement-trie-prefix-tree Expand file tree Collapse file tree 4 files changed +113
-0
lines changed Top Open diff view settings Original file line number Diff line number Diff line change 1+ /*
2+ time complexity : O(n)
3+ space complexity : O(1)
4+ */
5+ function maxProfit ( prices : number [ ] ) : number {
6+ let left = 0
7+ let right = 0
8+ let maxProfit = 0
9+
10+ while ( right < prices . length ) {
11+ const curProfit = prices [ right ] - prices [ left ]
12+ if ( prices [ left ] < prices [ right ] ) {
13+ maxProfit = Math . max ( curProfit , maxProfit )
14+ } else {
15+ left = right
16+ }
17+ right += 1
18+ }
19+ return maxProfit
20+ } ;
Original file line number Diff line number Diff line change 1+ /*
2+ time complexity : O(n * mlogm)
3+ space complexity : O(n * m)
4+ */
5+ function groupAnagrams ( strs : string [ ] ) : string [ ] [ ] {
6+ const strMap = new Map < string , string [ ] > ( )
7+ for ( let i = 0 ; i < strs . length ; i ++ ) {
8+ const sortedStr = strs [ i ] . split ( '' ) . sort ( ) . join ( '' )
9+ if ( ! strMap . has ( sortedStr ) ) {
10+ strMap . set ( sortedStr , [ strs [ i ] ] )
11+ } else {
12+ const prevArr = strMap . get ( sortedStr )
13+ prevArr . push ( strs [ i ] )
14+ strMap . set ( sortedStr , prevArr )
15+ }
16+ }
17+ return Array . from ( strMap . values ( ) )
18+ } ;
Original file line number Diff line number Diff line change 1+ /*
2+ time complexity : O(n)
3+ space complexity : O(n)
4+ */
5+ class TriedNode {
6+ children : Map < string , TriedNode >
7+ isEnd : boolean
8+ constructor ( ) {
9+ this . children = new Map ( )
10+ this . isEnd = false
11+ }
12+ }
13+
14+ class Trie {
15+ root : TriedNode
16+
17+ constructor ( ) {
18+ this . root = new TriedNode ( )
19+ }
20+
21+ insert ( word : string ) : void {
22+ let node = this . root
23+ for ( const char of word ) {
24+ if ( ! node . children . has ( char ) ) {
25+ node . children . set ( char , new TriedNode ( ) )
26+ }
27+ node = node . children . get ( char )
28+ }
29+ node . isEnd = true
30+ }
31+
32+ search ( word : string ) : boolean {
33+ let node = this . root
34+ for ( const char of word ) {
35+ if ( ! node . children . has ( char ) ) {
36+ return false
37+ }
38+ node = node . children . get ( char )
39+ }
40+ return node . isEnd
41+ }
42+
43+ startsWith ( prefix : string ) : boolean {
44+ let node = this . root
45+ for ( const char of prefix ) {
46+ if ( ! node . children . has ( char ) ) {
47+
48+ return false
49+ }
50+ node = node . children . get ( char )
51+ }
52+ return true
53+ }
54+ }
Original file line number Diff line number Diff line change 1+ /*
2+ time complexity : O(n^2k)
3+ space complexity : O(n + m)
4+ */
5+
6+ function wordBreak ( s : string , wordDict : string [ ] ) : boolean {
7+ const dp : boolean [ ] = new Array ( s . length + 1 ) . fill ( false )
8+
9+ dp [ 0 ] = true
10+
11+ const wordSet = new Set ( wordDict )
12+ for ( let i = 1 ; i <= s . length ; i ++ ) {
13+ for ( let j = 0 ; j < i ; j ++ ) {
14+ if ( dp [ j ] && wordSet . has ( s . substring ( j , i ) ) ) {
15+ dp [ i ] = true
16+ break
17+ }
18+ }
19+ }
20+ return dp [ s . length ]
21+ } ;
You can’t perform that action at this time.
0 commit comments