Skip to content

Commit 916f411

Browse files
authored
Merge pull request #1187 from sejineer/main
[sejineer] Week 01 solutions
2 parents eeef54c + b80c0da commit 916f411

File tree

5 files changed

+117
-0
lines changed

5 files changed

+117
-0
lines changed

contains-duplicate/sejineer.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
"""
2+
시간 복잡도 O(n)
3+
공간 복잡도 O(n)
4+
5+
코드 가독성 향상 코드
6+
class Solution:
7+
def containsDuplicate(self, nums: List[int]) -> bool:
8+
return len(nums) != len(set(nums))
9+
"""
10+
class Solution:
11+
def containsDuplicate(self, nums: List[int]) -> bool:
12+
check = set([])
13+
for i in nums:
14+
if i not in check:
15+
check.add(i)
16+
else:
17+
return True
18+
return False

house-robber/sejineer.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
"""
2+
시간 복잡도 O(N)
3+
공간 복잡도 O(N)
4+
5+
6+
"""
7+
8+
class Solution:
9+
def rob(self, nums: List[int]) -> int:
10+
memo = {}
11+
12+
def backtracking(k: int) -> int:
13+
if k >= len(nums):
14+
return 0
15+
if k in memo:
16+
return memo[k]
17+
18+
rob = nums[k] + backtracking(k + 2)
19+
skip = backtracking(k + 1)
20+
21+
memo[k] = max(rob, skip)
22+
return memo[k]
23+
24+
return backtracking(0)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
"""
2+
시간 복잡도 O(N)
3+
공간 복잡도 O(N)
4+
"""
5+
class Solution:
6+
def longestConsecutive(self, nums: List[int]) -> int:
7+
nums_set = set(nums)
8+
result = 0
9+
10+
for i in nums_set:
11+
if i - 1 not in nums_set:
12+
length = 1
13+
while i + length in nums_set:
14+
length += 1
15+
result = max(result, length)
16+
17+
return result

top-k-frequent-elements/sejineer.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
"""
2+
시간 복잡도 O(N)
3+
공간 복잡도 O(N)
4+
5+
Priority Queue 를 이용한 풀이
6+
시간 복잡도 O(Nlog(N))
7+
공간 복잡도 O(N)
8+
from queue import PriorityQueue
9+
from collections import Counter
10+
11+
class Solution:
12+
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
13+
counter = Counter(nums)
14+
que = PriorityQueue()
15+
16+
for num, freq in counter.items():
17+
que.put((-freq, num))
18+
19+
res = []
20+
21+
for _ in range(k):
22+
res.append(que.get()[1])
23+
24+
return res
25+
"""
26+
from collections import Counter
27+
28+
class Solution:
29+
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
30+
freq_map = Counter(nums)
31+
32+
bucket = [[] for _ in range(len(nums) + 1)]
33+
34+
for num, freq in freq_map.items():
35+
bucket[freq].append(num)
36+
37+
result = []
38+
39+
for i in range(len(bucket) - 1, -1, -1):
40+
if bucket[i]:
41+
for num in bucket[i]:
42+
result.append(num)
43+
if len(result) == k:
44+
return result

two-sum/sejineer.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
"""
2+
시간 복잡도 O(n)
3+
공간 복잡도 O(n)
4+
"""
5+
class Solution:
6+
def twoSum(self, nums: List[int], target: int) -> List[int]:
7+
nums_map = {}
8+
9+
for i, v in enumerate(nums):
10+
x = target - v
11+
if x in nums_map:
12+
j = nums_map[x]
13+
return [j, i]
14+
nums_map[v] = i

0 commit comments

Comments
 (0)