File tree Expand file tree Collapse file tree 5 files changed +140
-0
lines changed
longest-substring-without-repeating-characters Expand file tree Collapse file tree 5 files changed +140
-0
lines changed Original file line number Diff line number Diff line change
1
+ import scala .util .control .Breaks ._
2
+
3
+ object Solution {
4
+ def lengthOfLongestSubstring (s : String ): Int = {
5
+ var ans = 0
6
+ val visited = Array .fill(128 )(false ) // S(n) = O(1)
7
+ var i = 0
8
+ var j = 0
9
+ while (j != s.length) {
10
+ breakable { // but no continue in scala!
11
+ while (j != s.length) { // T(n) = O(n)
12
+ if (visited(s(j))) {
13
+ break
14
+ }
15
+ visited(s(j)) = true
16
+ j += 1
17
+ }
18
+ }
19
+ ans = Math .max(ans, j - i)
20
+
21
+ visited(s(i)) = false
22
+ i += 1
23
+ }
24
+ ans
25
+ }
26
+ }
Original file line number Diff line number Diff line change
1
+ var DRCS = [][]int {
2
+ {0 , - 1 ,},
3
+ {0 , 1 ,},
4
+ {- 1 , 0 ,},
5
+ {1 , 0 ,},
6
+ }
7
+
8
+ func numIslands (grid [][]byte ) int {
9
+ visited := make ([][]bool , len (grid )) // S(n) = O(n)
10
+ for i , row := range grid {
11
+ visited [i ] = make ([]bool , len (row ))
12
+ }
13
+ ans := 0
14
+ stack := [][]int {}
15
+ for i , row := range grid {
16
+ for j , c := range row {
17
+ if visited [i ][j ] || c == '0' {
18
+ continue
19
+ }
20
+ ans ++
21
+ visited [i ][j ] = true
22
+ stack = append (stack , []int {i , j })
23
+ for len (stack ) != 0 { // T(n) = O(n)
24
+ u := stack [len (stack ) - 1 ]
25
+ stack = stack [: len (stack ) - 1 ]
26
+ for _ , drc := range DRCS {
27
+ x := u [0 ] + drc [0 ]
28
+ y := u [1 ] + drc [1 ]
29
+ if x == - 1 || x == len (grid ) || y == - 1 || y == len (row ) ||
30
+ grid [x ][y ] == '0' || visited [x ][y ] {
31
+ continue
32
+ }
33
+ visited [x ][y ] = true
34
+ stack = append (stack , []int {x , y })
35
+ }
36
+ }
37
+ }
38
+ }
39
+ return ans
40
+ }
Original file line number Diff line number Diff line change
1
+ /**
2
+ * Definition for singly-linked list.
3
+ * class ListNode {
4
+ * int val;
5
+ * ListNode? next;
6
+ * ListNode([this.val = 0, this.next] );
7
+ * }
8
+ */
9
+ class Solution {
10
+ ListNode ? reverseList (ListNode ? head) {
11
+ var u = null ; // S(n) = O(1)
12
+ while (head != null ) { // T(n) = O(n)
13
+ final temp = head.next;
14
+ head.next = u;
15
+ u = head;
16
+ head = temp;
17
+ }
18
+ return u;
19
+ }
20
+ }
Original file line number Diff line number Diff line change
1
+ impl Solution {
2
+ pub fn set_zeroes ( matrix : & mut Vec < Vec < i32 > > ) {
3
+ let m = matrix. len ( ) ;
4
+ let n = matrix. first ( ) . unwrap ( ) . len ( ) ;
5
+ let erased_row_0 = ( 0 ..n) . any ( |i| matrix[ 0 ] [ i] == 0 ) ;
6
+ let erased_col_0 = ( 0 ..m) . any ( |i| matrix[ i] [ 0 ] == 0 ) ;
7
+ for i in 1 ..m {
8
+ for j in 1 ..n {
9
+ if matrix[ i] [ j] == 0 {
10
+ * matrix[ i] . first_mut ( ) . unwrap ( ) = 0 ;
11
+ matrix. first_mut ( ) . unwrap ( ) [ j] = 0 ;
12
+ }
13
+ }
14
+ }
15
+ for i in 1 ..m {
16
+ if * matrix[ i] . first ( ) . unwrap ( ) != 0 {
17
+ continue ;
18
+ }
19
+ for j in 0 ..n {
20
+ matrix[ i] [ j] = 0 ;
21
+ }
22
+ }
23
+ for j in 1 ..n {
24
+ if matrix. first ( ) . unwrap ( ) [ j] != 0 {
25
+ continue ;
26
+ }
27
+ for i in 0 ..m {
28
+ matrix[ i] [ j] = 0 ;
29
+ }
30
+ }
31
+ if erased_row_0 {
32
+ for j in 0 ..n {
33
+ matrix[ 0 ] [ j] = 0 ;
34
+ }
35
+ }
36
+ if erased_col_0 {
37
+ for i in 0 ..m {
38
+ matrix[ i] [ 0 ] = 0 ;
39
+ }
40
+ }
41
+ }
42
+ }
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ fun uniquePaths (m : Int , n : Int ): Int {
3
+ val dp = List (m + 1 ) {MutableList (n + 1 ) {0 }}
4
+ dp[0 ][1 ] = 1
5
+ for (i in 1 .. m) {
6
+ for (j in 1 .. n) {
7
+ dp[i][j] = dp[i][j - 1 ] + dp[i - 1 ][j]
8
+ }
9
+ }
10
+ return dp.last().last()
11
+ }
12
+ }
You can’t perform that action at this time.
0 commit comments