File tree Expand file tree Collapse file tree 5 files changed +122
-0
lines changed
longest-substring-without-repeating-characters Expand file tree Collapse file tree 5 files changed +122
-0
lines changed Original file line number Diff line number Diff line change 1+ class Solution :
2+ # 시간복잡도: O(N)
3+ # 공간복잡도: O(N)
4+ # set에서 제외하는 로직을 없애기 위해, map을 사용해서 idx값을 저장후, start와 비교해서 start보다 작은 idx를 가진 경우에는 중복이 아니라고 판단했습니다.
5+ def lengthOfLongestSubstring (self , s : str ) -> int :
6+
7+ last_idx = {}
8+ answer = 0
9+ start = 0
10+
11+ for idx , ch in enumerate (s ):
12+ # 중복 조회시 idx값과 start 값 비교를 통해, 삭제하는 로직을 없이 중복을 확인했습니다.
13+ if ch in last_idx and last_idx [ch ] >= start :
14+ start = last_idx [ch ] + 1
15+ last_idx [ch ] = idx
16+ else :
17+ answer = max (answer , idx - start + 1 )
18+ last_idx [ch ] = idx
19+
20+ return answer
Original file line number Diff line number Diff line change 1+ # 시간복잡도: O(M*N)
2+ # 공간복잡도: O(M*N)
3+
4+ from collections import deque
5+
6+
7+ class Solution :
8+ def numIslands (self , grid : List [List [str ]]) -> int :
9+ dx = [0 , 0 , - 1 , 1 ]
10+ dy = [- 1 , 1 , 0 , 0 ]
11+ m = len (grid )
12+ n = len (grid [0 ])
13+ q = deque ()
14+
15+ def bfs (a , b ):
16+ q .append ((a , b ))
17+ while q :
18+ x , y = q .popleft ()
19+
20+ for i in range (4 ):
21+ nx = x + dx [i ]
22+ ny = y + dy [i ]
23+ if not (0 <= nx < m and 0 <= ny < n ): continue
24+
25+ if grid [nx ][ny ] == '1' :
26+ grid [nx ][ny ] = '0'
27+ q .append ((nx , ny ))
28+
29+ count = 0
30+ for i in range (m ):
31+ for j in range (n ):
32+ if grid [i ][j ] == '1' :
33+ count += 1
34+ bfs (i , j )
35+
36+ return count
Original file line number Diff line number Diff line change 1+ /**
2+ * Definition for singly-linked list.
3+ * public class ListNode {
4+ * int val;
5+ * ListNode next;
6+ * ListNode() {}
7+ * ListNode(int val) { this.val = val; }
8+ * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
9+ * }
10+ */
11+ // 시간복잡도: O(N)
12+ // 공간복잡도: O(1)
13+ class Solution {
14+ public ListNode reverseList (ListNode head ) {
15+ ListNode prev = null ;
16+
17+ while (head != null ){
18+ ListNode next = head .next ;
19+ head .next = prev ;
20+ prev = head ;
21+ head = next ;
22+ }
23+
24+ return prev ;
25+ }
26+ }
Original file line number Diff line number Diff line change 1+ # 시간복잡도: O(m*n)
2+ # 공간복잡도: O(m+n)
3+ class Solution :
4+ def setZeroes (self , matrix : List [List [int ]]) -> None :
5+ m = len (matrix )
6+ n = len (matrix [0 ])
7+
8+ rows = set ()
9+ cols = set ()
10+
11+ for i in range (m ):
12+ for j in range (n ):
13+ if matrix [i ][j ] == 0 :
14+ rows .add (i )
15+ cols .add (j )
16+
17+ for row in rows :
18+ for j in range (n ):
19+ matrix [row ][j ] = 0
20+
21+ for col in cols :
22+ for i in range (m ):
23+ matrix [i ][col ] = 0
Original file line number Diff line number Diff line change 1+ from math import comb
2+ class Solution :
3+ # 시간복잡도: O(m+n)
4+ # 공간복잡도: O(1)
5+ def uniquePaths (self , m : int , n : int ) -> int :
6+ return comb (m + n - 2 , n - 1 ) # m+n-2Cn-1
7+
8+ # 시간복잡도: O(m*n)
9+ # 공간복잡도: O(n)
10+ def uniquePaths2 (self , m : int , n : int ) -> int :
11+ dp = [1 ] * n
12+
13+ for _ in range (1 , m ):
14+ for j in range (1 , n ):
15+ dp [j ] = dp [j - 1 ] + dp [j ]
16+
17+ return dp [n - 1 ]
You can’t perform that action at this time.
0 commit comments