Skip to content

Commit 4a77a2f

Browse files
author
Jinbeom
committed
Adds Solutions
1 parent 58bce35 commit 4a77a2f

File tree

5 files changed

+139
-0
lines changed

5 files changed

+139
-0
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution:
2+
# 시간복잡도: O(logN)
3+
# 공간복잡도: O(1)
4+
def findMin(self, nums: List[int]) -> int:
5+
n = len(nums)
6+
st, en = 0, n-1
7+
while st < en:
8+
mid = (st+en)//2
9+
if nums[mid] > nums[en]:
10+
st = mid + 1
11+
else:
12+
en = mid
13+
14+
return nums[st]

linked-list-cycle/kayden.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution:
2+
# 시간복잡도: O(N)
3+
# 공간복잡도: O(N)
4+
def hasCycle(self, head: Optional[ListNode]) -> bool:
5+
6+
visited = set()
7+
while head:
8+
if head in visited:
9+
return True
10+
11+
visited.add(head)
12+
head = head.next
13+
14+
return False

maximum-subarray/kayden.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution:
2+
# 시간복잡도: O(N)
3+
# 공간복잡도: O(1)
4+
def maxSubArray(self, nums: List[int]) -> int:
5+
6+
prev = 0
7+
answer = float('-inf')
8+
for num in nums:
9+
if prev + num > num:
10+
prev += num
11+
else:
12+
prev = num
13+
answer = max(answer, prev)
14+
15+
return max(prev, answer)

minimum-window-substring/kayden.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from collections import Counter, deque
2+
class Solution:
3+
# 시간복잡도: O(S+T)
4+
# 공간복잡도: O(T)
5+
def minWindow(self, s: str, t: str) -> str:
6+
counter = Counter(t)
7+
8+
index = deque()
9+
tot = 0
10+
m = len(s)
11+
st, en = 0, m - 1
12+
for idx, ch in enumerate(s):
13+
if ch not in counter:
14+
continue
15+
16+
counter[ch] -= 1
17+
index.append(idx)
18+
19+
if counter[ch] == 0:
20+
tot += 1
21+
22+
while index:
23+
if counter[s[index[0]]] < 0:
24+
counter[s[index[0]]] += 1
25+
index.popleft()
26+
else:
27+
break
28+
29+
if tot == len(counter):
30+
a = index[0]
31+
b = idx
32+
if b - a + 1 < m:
33+
st, en = a, b
34+
m = en - st + 1
35+
36+
if tot != len(counter):
37+
return ""
38+
39+
return s[st:en + 1]

pacific-atlantic-water-flow/kayden.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
class Solution:
2+
# 시간복잡도: O(N*M)
3+
# 공간복잡도: O(N*M)
4+
def pacificAtlantic(self, heights: List[List[int]]) -> List[List[int]]:
5+
6+
m = len(heights)
7+
n = len(heights[0])
8+
dx = [-1, 1, 0, 0]
9+
dy = [0, 0, -1, 1]
10+
11+
dp = [[False] * (n) for _ in range(m)]
12+
dp[0][n - 1] = True
13+
dp[m - 1][0] = True
14+
visited = set()
15+
16+
def dfs(x, y):
17+
if dp[x][y]:
18+
return 2
19+
20+
check = set()
21+
for i in range(4):
22+
nx = x + dx[i]
23+
ny = y + dy[i]
24+
25+
if 0 <= nx < m and 0 <= ny < n:
26+
if (nx, ny) not in visited and heights[nx][ny] <= heights[x][y]:
27+
visited.add((nx, ny))
28+
res = dfs(nx, ny)
29+
30+
if res != -1:
31+
check.add(res)
32+
visited.remove((nx, ny))
33+
else:
34+
if x == 0 or y == 0:
35+
check.add(0)
36+
if x == m - 1 or y == n - 1:
37+
check.add(1)
38+
39+
if 2 in check:
40+
dp[x][y] = 2
41+
return 2
42+
43+
if len(check) == 2:
44+
return 2
45+
46+
if check:
47+
return check.pop()
48+
49+
return -1
50+
51+
answer = []
52+
for i in range(m):
53+
for j in range(n):
54+
if dfs(i, j) == 2:
55+
answer.append([i, j])
56+
57+
return answer

0 commit comments

Comments
 (0)