Skip to content

Commit 44521ac

Browse files
mandoolalaMJ Kang
and
MJ Kang
authoredApr 19, 2025
[mandoolala] WEEK 01 solutions (#1210)
* init solution files * contains duplicate sol * two sum sol * eol * top k elements * eol * try using heap solution * longest consecutive sequence * use num set for time limit exceeded * house robber --------- Co-authored-by: MJ Kang <[email protected]>
1 parent cf8f743 commit 44521ac

File tree

5 files changed

+129
-0
lines changed

5 files changed

+129
-0
lines changed
 

‎contains-duplicate/mandoolala.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
"""
2+
https://leetcode.com/problems/contains-duplicate/
3+
"""
4+
from typing import List
5+
6+
class Solution:
7+
def containsDuplicate(self, nums: List[int]) -> bool:
8+
'''
9+
[Complexity]
10+
Time: O(n)
11+
Space: O(n)
12+
'''
13+
return (len(nums) != len(set(nums)))
14+
15+
'''
16+
alternative:
17+
nums_set = set()
18+
for num in nums:
19+
if num in nums_set:
20+
return True
21+
nums_set.add(num)
22+
return False
23+
'''

‎house-robber/mandoolala.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from typing import List
2+
3+
class Solution:
4+
def rob(self, nums: List[int]) -> int:
5+
'''
6+
[Complexity]
7+
Time: O(n)
8+
Space: O(n)
9+
'''
10+
cnt = len(nums)
11+
12+
if cnt == 1:
13+
return nums[0]
14+
if cnt == 2:
15+
return max(nums[0], nums[1])
16+
17+
dp = [0] * cnt
18+
dp[0] = nums[0]
19+
dp[1] = max(nums[0], nums[1])
20+
21+
for i in range(2, cnt):
22+
# skip: dp[i-1]
23+
# rob: dp[i-2]+nums[i]
24+
dp[i] = max(dp[i - 1], dp[i - 2] + nums[i])
25+
return max(dp)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from typing import List
2+
3+
class Solution:
4+
def longestConsecutive(self, nums: List[int]) -> int:
5+
num_set = set(nums)
6+
longest = 0
7+
for num in num_set:
8+
if num - 1 in num_set:
9+
continue
10+
length = 1
11+
while num + length in num_set:
12+
length += 1
13+
longest = max(length, longest)
14+
return longest

‎top-k-frequent-elements/mandoolala.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
6+
'''
7+
Using (min)heap
8+
[Complexity]
9+
Time: O(log n)
10+
Space: O(n+k)
11+
'''
12+
from heapq import heappush, heappop
13+
counter = {}
14+
for num in nums:
15+
counter[num] = counter.get(num, 0) + 1
16+
heap = []
17+
for num, freq in counter.items():
18+
heappush(heap, (freq, num))
19+
if len(heap) > k:
20+
heappop(heap)
21+
return [num for _, num in heap]
22+
'''
23+
Using hash table
24+
[Complexity]
25+
Time: O(n log n)
26+
Space: O(n)
27+
'''
28+
'''
29+
countDict = {}
30+
for num in nums:
31+
if num in countDict:
32+
countDict[num] += 1
33+
else:
34+
countDict[num] = 1
35+
sortedDictList = sorted(countDict.items(), key=lambda item: item[1], reverse=True)
36+
freqElements = []
37+
for i in range(k):
38+
freqElements.append(sortedDictList[i][0])
39+
return freqElements
40+
'''

‎two-sum/mandoolala.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from typing import List
2+
3+
class Solution:
4+
def twoSum(self, nums: List[int], target: int) -> List[int]:
5+
# return indices of two numbers such that they add up to target
6+
'''
7+
[Complexity]
8+
Time: O(n)
9+
Space: O(1)
10+
'''
11+
nums_dict = {}
12+
for idx, num in enumerate(nums):
13+
remaining = target - num
14+
if remaining in nums_dict:
15+
return [idx, nums_dict[remaining]]
16+
nums_dict[num] = idx
17+
'''
18+
[Complexity]
19+
Time: O(n^2)
20+
Space: O(1)
21+
22+
for i in range(0,len(nums)-1):
23+
for j in range(i+1, len(nums)):
24+
sum = nums[i] + nums[j]
25+
if sum == target:
26+
return [i, j]
27+
'''

0 commit comments

Comments
 (0)
Please sign in to comment.