Skip to content

Commit 61b4935

Browse files
committed
[20220830] solve the problems
1 parent f7f7a08 commit 61b4935

8 files changed

+186
-12
lines changed

common/leetcodeds.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,9 @@ def __init__(self, x):
99
self.val = x
1010
self.left = None
1111
self.right = None
12+
13+
14+
class Node:
15+
def __init__(self, val=None, children=None):
16+
self.val = val
17+
self.children = children

study-plan/leetcode-75/day3-reverse-linked-list.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,7 @@
22
# 206. Reverse Linked List
33

44
from typing import Optional
5-
6-
7-
# Definition for singly-linked list.
8-
class ListNode:
9-
def __init__(self, val=0, next=None):
10-
self.val = val
11-
self.next = next
12-
13-
def __str__(self) -> str:
14-
return str(self.val)
5+
from common.leetcodeds import ListNode
156

167

178
class Solution:
@@ -34,8 +25,16 @@ def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
3425
return dummy.next
3526

3627
def reverseList_2(self, head: Optional[ListNode]) -> Optional[ListNode]:
37-
# TODO stack 사용 없이 풀어보기
38-
pass
28+
if head is None:
29+
return None
30+
31+
prev, cur = None, head
32+
while head is not None:
33+
head = head.next
34+
cur.next = prev
35+
prev = cur
36+
cur = head
37+
return prev
3938

4039

4140
if __name__ == '__main__':
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# https://leetcode.com/problems/best-time-to-buy-and-sell-stock/
2+
# 121. Best Time to Buy and Sell Stock
3+
from typing import List
4+
5+
6+
class Solution:
7+
def maxProfit(self, prices: List[int]) -> int:
8+
cur = prices[0]
9+
result = 0
10+
for i in range(1, len(prices)):
11+
result = max(prices[i] - cur, result)
12+
cur = min(prices[i], cur)
13+
14+
return result
15+
16+
17+
if __name__ == '__main__':
18+
sol = Solution()
19+
print(sol.maxProfit([7, 1, 5, 3, 6, 4]))
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# https://leetcode.com/problems/longest-palindrome/
2+
# 409. Longest Palindrome
3+
4+
from collections import Counter
5+
6+
7+
class Solution:
8+
def longestPalindrome(self, s: str) -> int:
9+
counter = Counter(s)
10+
11+
result = 0
12+
for k, v in counter.items():
13+
if v % 2 == 0:
14+
result += v
15+
counter[k] = 0
16+
elif v % 2 != 0 and v >= 2:
17+
result += v - 1
18+
counter[k] -= 1
19+
20+
for k, v in counter.items():
21+
if v > 0:
22+
result += 1
23+
break
24+
return result
25+
26+
27+
if __name__ == '__main__':
28+
sol = Solution()
29+
print(sol.longestPalindrome("abccccdd"))
30+
print(sol.longestPalindrome("a"))
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# https://leetcode.com/problems/binary-tree-level-order-traversal/
2+
# 102. Binary Tree Level Order Traversal
3+
from typing import Optional, List
4+
from common.leetcodeds import TreeNode
5+
6+
# Definition for a binary tree node.
7+
# class TreeNode:
8+
# def __init__(self, val=0, left=None, right=None):
9+
# self.val = val
10+
# self.left = left
11+
# self.right = right
12+
13+
from collections import deque
14+
15+
16+
class Solution:
17+
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
18+
result = []
19+
if root is None:
20+
return result
21+
22+
queue = deque()
23+
queue.append((0, root))
24+
length = -1
25+
26+
while queue:
27+
depth, node = queue.popleft()
28+
29+
if length != depth:
30+
length += 1
31+
result.append([])
32+
result[depth].append(node.val)
33+
34+
if node.left is not None:
35+
queue.append((depth + 1, node.left))
36+
if node.right is not None:
37+
queue.append((depth + 1, node.right))
38+
39+
return result
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# https://leetcode.com/problems/n-ary-tree-preorder-traversal/
2+
# 589. N-ary Tree Preorder Traversal
3+
4+
from typing import List
5+
from common.leetcodeds import Node
6+
7+
8+
class Solution:
9+
def dfs(self, node, result):
10+
11+
if node is None:
12+
return
13+
14+
result.append(node.val)
15+
16+
if node.children is None:
17+
return
18+
19+
for child in node.children:
20+
self.dfs(child, result)
21+
22+
# TODO iteration 으로도 풀기
23+
def preorder(self, root: 'Node') -> List[int]:
24+
if root is None:
25+
return []
26+
27+
result = [root.val]
28+
for node in root.children:
29+
self.dfs(node, result)
30+
return result
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# https://leetcode.com/problems/binary-search/
2+
# 704. Binary Search
3+
from typing import List
4+
5+
6+
class Solution:
7+
def search(self, nums: List[int], target: int) -> int:
8+
result = -1
9+
10+
left, right = 0, len(nums) - 1
11+
12+
while left <= right:
13+
mid = (left + right) // 2
14+
if nums[mid] < target:
15+
left += 1
16+
elif nums[mid] > target:
17+
right -= 1
18+
else:
19+
return mid
20+
21+
return result
22+
23+
24+
if __name__ == '__main__':
25+
sol = Solution()
26+
print(sol.search([-1, 0, 3, 5, 9, 12], 9))
27+
print(sol.search([-1, 0, 3, 5, 9, 12], 2))
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# https://leetcode.com/problems/first-bad-version/
2+
# 278. First Bad Version
3+
4+
# The isBadVersion API is already defined for you.
5+
def isBadVersion(version: int) -> bool:
6+
return version == 1702766719
7+
8+
9+
class Solution:
10+
def firstBadVersion(self, n: int) -> int:
11+
left, right = 1, n
12+
while left <= right:
13+
mid = (left + right) // 2
14+
if not isBadVersion(mid):
15+
left = mid + 1
16+
else:
17+
right = mid - 1
18+
19+
return left
20+
21+
22+
if __name__ == '__main__':
23+
sol = Solution()
24+
print(sol.firstBadVersion(2126753390))

0 commit comments

Comments
 (0)