Skip to content

Commit cf5b8e0

Browse files
authored
Merge pull request #1700 from rivkode/main
[rivkode] WEEK 01 solutions
2 parents 3e49d66 + 3c24c20 commit cf5b8e0

File tree

5 files changed

+102
-14
lines changed

5 files changed

+102
-14
lines changed

contains-duplicate/rivkode.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@
55
# The size of the set for storing deduplicated elements is proportional to the length of the input list.
66

77
class Solution:
8-
def containsDuplicate(self, nums: list[int]) -> bool:
9-
list_len = len(nums)
10-
set_len = len(set(nums))
8+
def containsDuplicate(self, nums):
9+
list_num = len(nums)
10+
set_num = len(set(nums))
1111

12-
return list_len != set_len
12+
if list_num != set_num:
13+
return True
14+
else:
15+
return False
1316

1417
if __name__ == "__main__":
1518
solution = Solution()
@@ -25,3 +28,6 @@ def containsDuplicate(self, nums: list[int]) -> bool:
2528
print(f"start {index} test")
2629
print(f"input : {test}")
2730
print(f"Is valid palindrome ? {solution.containsDuplicate(test)}\n")
31+
32+
33+

house-robber/rivkode.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution(object):
2+
def rob(self, nums):
3+
"""
4+
:type nums: List[int]
5+
:rtype: int
6+
"""
7+
memo = {}
8+
9+
def dfs(start):
10+
if start in memo:
11+
return memo[start]
12+
if not start < len(nums):
13+
memo[start] = 0
14+
else:
15+
memo[start] = max(nums[start] + dfs(start + 2), dfs(start + 1))
16+
return memo[start]
17+
18+
return dfs(0)
19+
20+
21+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution(object):
2+
def longestConsecutive(self, nums):
3+
"""
4+
:type nums: List[int]
5+
:rtype: int
6+
"""
7+
num_set = set(nums)
8+
longest = 0
9+
10+
for num in nums:
11+
if num - 1 in num_set:
12+
continue
13+
14+
length = 1
15+
while num + length in num_set:
16+
length += 1
17+
longest = max(length, longest)
18+
return longest
19+
20+
21+
22+

top-k-frequent-elements/rivkode.py

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,30 @@
88
# - and when sorting takes O(n), hash[x] occupy O(1)
99

1010
class Solution:
11-
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
12-
hash = dict()
11+
def topKFrequent(self, nums, k):
12+
"""
13+
:type nums: List[int]
14+
:type k: int
15+
:rtype: List[int]
16+
"""
1317

14-
# for loop nums to set count for each element in hash(dictionary)
15-
for num in nums:
16-
if num in hash:
17-
hash[num] += 1
18-
else:
19-
hash[num] = 1
18+
dic = {}
2019

21-
# sort (TimSort), using lambda function to set a sorting key which is a count
22-
return sorted(hash, key=lambda x: hash[x], reverse=True)[:k]
20+
for v in nums:
21+
dic[v] = dic.get(v, 0) + 1
22+
23+
reverse_desc = sorted(dic.items(), key=lambda item: item[1], reverse=True)
24+
25+
n = 0
26+
result = []
27+
for v in reverse_desc:
28+
if n == k:
29+
break
30+
31+
result.append(v[0])
32+
n += 1
33+
34+
return result
2335

2436
if __name__ == "__main__":
2537
solution = Solution()
@@ -38,3 +50,7 @@ def topKFrequent(self, nums: List[int], k: int) -> List[int]:
3850
print(f"start{i}")
3951
print(f"input : {nums}, {k}")
4052
print(f"result : {result}")
53+
54+
55+
56+

two-sum/rivkode.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution(object):
2+
def twoSum(self, nums, target):
3+
4+
"""
5+
:type nums: List[int]
6+
:type target: int
7+
:rtype: List[int]
8+
"""
9+
10+
dic = {}
11+
12+
for i, v in enumerate(nums):
13+
complement = target - v
14+
15+
if complement in dic:
16+
return [i, dic[complement]]
17+
18+
dic[v] = i
19+
20+
21+
22+
23+

0 commit comments

Comments
 (0)