File tree Expand file tree Collapse file tree 5 files changed +159
-0
lines changed
best-time-to-buy-and-sell-stock
encode-and-decode-strings
implement-trie-prefix-tree Expand file tree Collapse file tree 5 files changed +159
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[] } prices
3
+ * @return {number }
4
+ */
5
+ var maxProfit = function ( prices ) {
6
+ let minPrice = Number . MAX_SAFE_INTEGER ;
7
+ let maxProfit = 0 ;
8
+
9
+ for ( let i = 0 ; i < prices . length ; i ++ ) {
10
+ minPrice = Math . min ( minPrice , prices [ i ] ) ;
11
+ maxProfit = Math . max ( maxProfit , prices [ i ] - minPrice ) ;
12
+ }
13
+
14
+ return maxProfit ;
15
+ } ;
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ /**
3
+ * @param {string[] } strs
4
+ * @returns {string }
5
+ */
6
+ encode ( strs ) {
7
+ return JSON . stringify ( strs ) ;
8
+ }
9
+
10
+ /**
11
+ * @param {string } str
12
+ * @returns {string[] }
13
+ */
14
+ decode ( str ) {
15
+ return JSON . parse ( str ) ;
16
+ }
17
+ }
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {string[] } strs
3
+ * @return {string[][] }
4
+ */
5
+ var groupAnagrams = function ( strs ) {
6
+ const A_ASCII = 'a' . charCodeAt ( ) ;
7
+
8
+ const anagramMap = new Map ( ) ;
9
+
10
+ for ( const str of strs ) {
11
+ const counter = new Array ( 26 ) . fill ( 0 ) ;
12
+
13
+ for ( let i = 0 ; i < str . length ; i ++ ) {
14
+ counter [ str . charCodeAt ( i ) - A_ASCII ] ++ ;
15
+ }
16
+
17
+ let key = '' ;
18
+ for ( let i = 0 ; i < 26 ; i ++ ) {
19
+ if ( counter [ i ] > 0 ) {
20
+ key += String . fromCharCode ( i + A_ASCII ) + counter [ i ] ;
21
+ }
22
+ }
23
+
24
+ if ( ! anagramMap . has ( key ) ) {
25
+ anagramMap . set ( key , [ ] ) ;
26
+ }
27
+ anagramMap . get ( key ) . push ( str ) ;
28
+ }
29
+
30
+ return Array . from ( anagramMap . values ( ) ) ;
31
+ } ;
32
+
33
+ // 시간 복잡도: O(n), 공간 복잡도: O(n)
Original file line number Diff line number Diff line change
1
+
2
+ var Trie = function ( ) {
3
+ this . isEnd = false ;
4
+ } ;
5
+
6
+ /**
7
+ * @param {string } word
8
+ * @return {void }
9
+ */
10
+ Trie . prototype . insert = function ( word ) {
11
+ let currentTrie = this ;
12
+ word . split ( '' ) . forEach ( alphabet => {
13
+ if ( ! currentTrie [ alphabet ] ) {
14
+ currentTrie [ alphabet ] = new Trie ( ) ;
15
+ }
16
+ currentTrie = currentTrie [ alphabet ] ;
17
+ } ) ;
18
+
19
+ currentTrie . isEnd = true ;
20
+ } ;
21
+
22
+ /**
23
+ * @param {string } word
24
+ * @return {boolean }
25
+ */
26
+ Trie . prototype . search = function ( word ) {
27
+ let currentTrie = this ;
28
+
29
+ for ( let alphabet of word ) {
30
+ if ( ! currentTrie [ alphabet ] ) {
31
+ return false ;
32
+ }
33
+ currentTrie = currentTrie [ alphabet ] ;
34
+ }
35
+
36
+ return currentTrie . isEnd ;
37
+ } ;
38
+
39
+ /**
40
+ * @param {string } prefix
41
+ * @return {boolean }
42
+ */
43
+ Trie . prototype . startsWith = function ( prefix ) {
44
+ let currentTrie = this ;
45
+
46
+ for ( let alphabet of prefix ) {
47
+ if ( ! currentTrie [ alphabet ] ) {
48
+ return false ;
49
+ }
50
+ currentTrie = currentTrie [ alphabet ] ;
51
+ }
52
+
53
+ return true ;
54
+ } ;
55
+
56
+ /**
57
+ * Your Trie object will be instantiated and called as such:
58
+ * var obj = new Trie()
59
+ * obj.insert(word)
60
+ * var param_2 = obj.search(word)
61
+ * var param_3 = obj.startsWith(prefix)
62
+ */
63
+
64
+
65
+ // insert 시간복잡도: O(n), search 시간복잡도: O(n), startsWith 시간복잡도: O(n)
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {string } s
3
+ * @param {string[] } wordDict
4
+ * @return {boolean }
5
+ */
6
+ var wordBreak = function ( s , wordDict ) {
7
+ const wordDictSet = new Set ( wordDict ) ;
8
+ const visited = new Set ( ) ;
9
+
10
+ const indexStack = [ 0 ] ;
11
+ while ( indexStack . length > 0 ) {
12
+ const startIndex = indexStack . pop ( ) ;
13
+
14
+ if ( visited . has ( startIndex ) ) continue ;
15
+ visited . add ( startIndex ) ;
16
+
17
+ if ( startIndex === s . length ) return true ;
18
+
19
+ for ( let endIndex = startIndex + 1 ; endIndex <= s . length ; endIndex ++ ) {
20
+ const word = s . substring ( startIndex , endIndex ) ;
21
+
22
+ if ( wordDictSet . has ( word ) ) {
23
+ indexStack . push ( endIndex ) ;
24
+ }
25
+ }
26
+ }
27
+
28
+ return false ;
29
+ } ;
You can’t perform that action at this time.
0 commit comments