Skip to content

Commit bfe145d

Browse files
authored
Merge pull request #1723 from hyogshin/main
2 parents 19403e8 + 793e1f4 commit bfe145d

File tree

5 files changed

+130
-0
lines changed

5 files changed

+130
-0
lines changed

contains-duplicate/hyogshin.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution:
2+
def containsDuplicate(self, nums: List[int]) -> bool:
3+
if len(nums) == len(set(nums)):
4+
return False
5+
else:
6+
return True
7+
8+
9+
10+
'''
11+
시간 복잡도: O(n)
12+
- set(nums)는 내부적으로 nums의 모든 원소에 대해 __hash__() 및 __eq__() 호출 -> O(n)
13+
- len() 함수는 O(1) -> 무시
14+
15+
공간 복잡도: O(n)
16+
- set(nums)는 nums의 원소를 모두 저장할 수 있게 공간 사용 -> 최악의 경우 O(n)
17+
'''

house-robber/hyogshin.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution:
2+
def rob(self, nums: List[int]) -> int:
3+
dp = [0] * (len(nums))
4+
dp[0] = nums[0]
5+
if len(nums) > 1:
6+
dp[1] = max(dp[0], nums[1])
7+
8+
for i in range(2, len(nums)):
9+
dp[i] = max(dp[i-2] + nums[i], dp[i-1])
10+
11+
return max(dp)
12+
13+
'''
14+
시간 복잡도: O(n log n)
15+
- set() -> O(n)
16+
- sorted() -> O(n log n)
17+
- for loop -> O(n)
18+
- max() -> O(n)
19+
20+
공간 복잡도: O(n)
21+
- set() -> O(n)
22+
- sorted list -> O(n)
23+
- rs -> O(n)
24+
- O(3n) => O(n)
25+
'''
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
class Solution:
2+
def longestConsecutive(self, nums: List[int]) -> int:
3+
if not nums:
4+
return 0
5+
s = set(nums)
6+
nums = sorted(list(s))
7+
rs = []
8+
cnt = 1
9+
10+
for i in range(len(nums)-1):
11+
if (nums[i] + 1) == nums[i+1]:
12+
cnt += 1
13+
else:
14+
rs.append(cnt)
15+
cnt = 1
16+
17+
rs.append(cnt)
18+
return max(rs)
19+
20+
'''
21+
시간 복잡도: O(n log n)
22+
- set(nums) -> O(n)
23+
- sorted(list(s)) -> O(n log n)
24+
- for loop -> O(n)
25+
- O(2n) + O(n log n) => O(2n) 이 아니라 왜 O(n log n) 이지?
26+
27+
공간 복잡도: O(n)
28+
- set -> O(n)
29+
- sorted() -> O(n)
30+
- rs -> O(n)
31+
- O(3n) => O(n)
32+
'''
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
class Solution:
2+
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
3+
plus = [0] * (10**4 + 1)
4+
minus = [0] * (10**4 + 1)
5+
6+
for i in range(len(nums)):
7+
if nums[i] < 0:
8+
minus[-(nums[i])] += 1
9+
else:
10+
plus[nums[i]] += 1
11+
12+
ans = []
13+
for i in range(k):
14+
if max(max(minus), max(plus)) == max(plus):
15+
idx = plus.index(max(plus))
16+
ans.append(idx)
17+
plus[idx] = 0
18+
else:
19+
idx = minus.index(max(minus))
20+
ans.append(-(idx))
21+
minus[idx] = 0
22+
23+
return ans
24+
25+
'''
26+
시간 복잡도: O(1)
27+
- for loop -> 보통 O(n) 이지만, 길이 10001 짜리 고정 배열 -> O(1)로 취급 가능
28+
29+
공간 복잡도: 입력 제외 -> O(1), 입력 포함 -> O(n)
30+
- plus 배열: 10001 -> O(1)
31+
- minus 배열: 10001 -> O(1)
32+
- ans 배열: 길이 k -> O(k)
33+
'''

two-sum/hyogshin.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution:
2+
def twoSum(self, nums: List[int], target: int) -> List[int]:
3+
rs = []
4+
for i in range(len(nums) - 1, -1, -1):
5+
pair = target - nums[i]
6+
if pair not in nums or i == nums.index(pair):
7+
continue
8+
idx = nums.index(pair)
9+
if pair in nums:
10+
rs.append(i)
11+
rs.append(idx)
12+
break
13+
return rs
14+
15+
'''
16+
시간 복잡도: O(n^2)
17+
- nums.index(pair) -> O(n)
18+
- for loop 안에서 nums.index(pair) 최대 2번 호출 -> O(2n^2) -> O(n^2)
19+
20+
공간 복잡도: O(1)
21+
- rs 배열에서 number 2개 저장 -> O(1) 공간
22+
- nums 복사나 set/dict 없음
23+
'''

0 commit comments

Comments
 (0)