File tree 5 files changed +167
-0
lines changed
longest-substring-without-repeating-characters
5 files changed +167
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @description
3
+ * brainstorming:
4
+ * hash table + two pointer
5
+ *
6
+ * n = length of s
7
+ * time complexity: O(n)
8
+ * space complexity: O(n)
9
+ */
10
+ var lengthOfLongestSubstring = function ( s ) {
11
+ const map = new Map ( ) ;
12
+ let answer = 0 ;
13
+ let start = 0 ;
14
+
15
+ for ( let i = 0 ; i < s . length ; i ++ ) {
16
+ if ( map . has ( s [ i ] ) ) start = Math . max ( map . get ( s [ i ] ) + 1 , start ) ;
17
+ map . set ( s [ i ] , i ) ;
18
+ answer = Math . max ( answer , i - start + 1 ) ;
19
+ }
20
+
21
+ return answer ;
22
+ } ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @description
3
+ * brainstorming:
4
+ * hash table + two pointer
5
+ *
6
+ * n = length of grid
7
+ * k = length of grid[index]
8
+ * time complexity: O(n * k)
9
+ * space complexity: O(n * k)
10
+ */
11
+ var numIslands = function ( grid ) {
12
+ let answer = 0 ;
13
+ const visited = Array . from ( { length : grid . length } , ( _ , i ) =>
14
+ Array . from ( { length : grid [ i ] . length } , ( ) => false )
15
+ ) ;
16
+
17
+ const dfs = ( r , c ) => {
18
+ const dr = [ 0 , 1 , 0 , - 1 ] ;
19
+ const dc = [ 1 , 0 , - 1 , 0 ] ;
20
+
21
+ for ( let i = 0 ; i < 4 ; i ++ ) {
22
+ const nextR = r + dr [ i ] ;
23
+ const nextC = c + dc [ i ] ;
24
+
25
+ if (
26
+ nextR >= 0 &&
27
+ nextR < grid . length &&
28
+ nextC >= 0 &&
29
+ nextC < grid [ r ] . length &&
30
+ grid [ nextR ] [ nextC ] == 1 &&
31
+ ! visited [ nextR ] [ nextC ]
32
+ ) {
33
+ visited [ nextR ] [ nextC ] = true ;
34
+ dfs ( nextR , nextC ) ;
35
+ }
36
+ }
37
+ } ;
38
+
39
+ for ( let row = 0 ; row < grid . length ; row ++ ) {
40
+ for ( let column = 0 ; column < grid [ row ] . length ; column ++ ) {
41
+ if ( grid [ row ] [ column ] == 1 && ! visited [ row ] [ column ] ) {
42
+ visited [ row ] [ column ] = true ;
43
+ answer ++ ;
44
+ dfs ( row , column ) ;
45
+ }
46
+ }
47
+ }
48
+ return answer ;
49
+ } ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @description
3
+ * brainstorming:
4
+ * Thinking of stacking nodes like stacks while traveling
5
+ *
6
+ * time complexity: O(n)
7
+ * space complexity: O(n)
8
+ */
9
+
10
+ var reverseList = function ( head ) {
11
+ let answer = null ;
12
+
13
+ const buildReverseList = ( target ) => {
14
+ if ( target === null ) return ;
15
+
16
+ const node = new ListNode ( target . val , answer ) ;
17
+ answer = node ;
18
+
19
+ buildReverseList ( target . next ) ;
20
+ } ;
21
+
22
+ buildReverseList ( head ) ;
23
+
24
+ return answer ;
25
+ } ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @description
3
+ * brainstorming:
4
+ * memoization
5
+ *
6
+ * m: length of matrix
7
+ * n: length of matrix[i]
8
+ * time complexity: O(m * n)
9
+ * space complexity: O(m * n)
10
+ */
11
+ var setZeroes = function ( matrix ) {
12
+ const stack = [ ] ;
13
+ const memo = { row : new Set ( ) , column : new Set ( ) } ;
14
+
15
+ const setZero = ( { r, c, isRow, isColumn } ) => {
16
+ const length = isRow ? matrix . length : matrix [ 0 ] . length ;
17
+
18
+ for ( let i = 0 ; i < length ; i ++ ) {
19
+ const row = isRow ? i : r ;
20
+ const column = isColumn ? i : c ;
21
+ matrix [ row ] [ column ] = 0 ;
22
+ }
23
+ } ;
24
+
25
+ matrix . forEach ( ( row , r ) => {
26
+ row . forEach ( ( value , c ) => {
27
+ if ( value === 0 ) stack . push ( [ r , c ] ) ;
28
+ } ) ;
29
+ } ) ;
30
+
31
+ while ( stack . length ) {
32
+ const [ r , c ] = stack . pop ( ) ;
33
+
34
+ if ( ! memo . row . has ( r ) ) {
35
+ setZero ( { r, c, isColumn : true } ) ;
36
+ memo . row . add ( r ) ;
37
+ }
38
+
39
+ if ( ! memo . column . has ( c ) ) {
40
+ setZero ( { r, c, isRow : true } ) ;
41
+ memo . column . add ( c ) ;
42
+ }
43
+ }
44
+
45
+ return matrix ;
46
+ } ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @description
3
+ * brainstorming:
4
+ * 1. dfs -> time limited
5
+ * 2. dynamic programming
6
+ *
7
+ * time complexity: O(m * n)
8
+ * space complexity: O(m * n)
9
+ */
10
+
11
+ var uniquePaths = function ( m , n ) {
12
+ // initialize
13
+ const dp = Array . from ( { length : m } , ( _ , i ) =>
14
+ Array . from ( { length : n } , ( _ , j ) => ( i === 0 || j === 0 ? 1 : 0 ) )
15
+ ) ;
16
+
17
+ for ( let i = 1 ; i < m ; i ++ ) {
18
+ for ( let j = 1 ; j < n ; j ++ ) {
19
+ // recurrence relation
20
+ dp [ i ] [ j ] = dp [ i - 1 ] [ j ] + dp [ i ] [ j - 1 ] ;
21
+ }
22
+ }
23
+
24
+ return dp [ m - 1 ] [ n - 1 ] ;
25
+ } ;
You can’t perform that action at this time.
0 commit comments