from typing import Any
class Array:
def __init__(self, size: int) -> None:
self.size = size
self.data = [None] * size
def __getitem__(self, index: int) -> Any:
return self.data[index]
def __setitem__(self, index: int, value: Any) -> None:
self.data[index] = value
def __len__(self) -> int:
return len(self.data)
def __repr__(self) -> str:
return repr(self.data)from typing import Any
class TreeNode:
def __init__(self, data: Any) -> None:
self.data = data
self.left = None
self.right = None
class BinaryTree:
def __init__(self) -> None:
self.root = None
def insert(self, data: Any) -> None:
if not self.root:
self.root = TreeNode(data)
else:
self.insert_node(self.root, data)
def insert_node(self, node: TreeNode | None, data: Any) -> TreeNode:
if not node:
return TreeNode(data)
if not node.left:
node.left = TreeNode(data)
elif not node.right:
node.right = TreeNode(data)
else:
node.left = self.insert_node(node.left, data)
return node
def __repr__(self) -> str:
return 'Empty tree' if not self.root else self._print_tree(self.root, '', True)
def _print_tree(self, node: TreeNode | None, prefix: str, is_left: bool) -> str:
if node is None:
return ''
result = ''
result += self._print_tree(node.right, prefix + ('│ ' if is_left else ' '), False)
result += prefix + ('└── ' if is_left else '┌── ') + str(node.data) + '\n'
result += self._print_tree(node.left, prefix + (' ' if is_left else '│ '), True)
return resultfrom typing import Any
class ListNode:
def __init__(self, data: Any) -> None:
self.data = data
self.prev = None
self.next = None
def __repr__(self) -> str:
return f'[{self.data}]'
class DoublyLinkedList:
def __init__(self) -> None:
self.head = None
def append(self, data: Any) -> None:
if not self.head:
self.head = ListNode(data)
return
curr = self.head
while curr.next:
curr = curr.next
new_node = ListNode(data)
curr.next = new_node
new_node.prev = curr
def delete(self, data: Any) -> None:
if not self.head:
return
if self.head.data == data:
self.head = self.head.next
if self.head:
self.head.prev = None
return
curr = self.head
while curr:
if curr.data == data:
prev_node = curr.prev
prev_node.next = curr.next
if curr.next:
curr.next.prev = prev_node
return
curr = curr.next
def reverse(self) -> None:
curr = self.head
prev = None
while curr:
nxt = curr.next
curr.next = prev
curr.prev = nxt
prev = curr
curr = nxt
self.head = prev
def __repr__(self) -> str:
if not self.head:
return 'None'
nodes = []
curr = self.head
while curr:
nodes.append(repr(curr))
curr = curr.next
return ' <-> '.join(nodes) + ' <-> None'from typing import Any
class HashMap:
def __init__(self) -> None:
self.size = 100000
self.bucket = [None] * self.size
def _hash(self, key: int) -> int:
return hash(key) % self.size
def __setitem__(self, key: int, value: Any) -> None:
self.bucket[self._hash(key)] = value
def __getitem__(self, key: int) -> Any:
return self.bucket[self._hash(key)]
def __delitem__(self, key: int) -> None:
self.bucket[self._hash(key)] = Nonefrom typing import Any
class ListNode:
def __init__(self, data: Any) -> None:
self.data = data
self.next = None
def __repr__(self) -> str:
return f'[{self.data}]'
class LinkedList:
def __init__(self) -> None:
self.head = None
def append(self, data: Any) -> None:
if not self.head:
self.head = ListNode(data)
return
curr = self.head
while curr.next:
curr = curr.next
curr.next = ListNode(data)
def delete(self, data: Any) -> None:
if not self.head:
return
if self.head.data == data:
self.head = self.head.next
return
prev = None
curr = self.head
while curr:
if curr.data == data:
prev.next = curr.next
return
prev = curr
curr = curr.next
def reverse(self) -> None:
prev = None
curr = self.head
while curr:
nxt = curr.next
curr.next = prev
prev = curr
curr = nxt
self.head = prev
def __repr__(self) -> str:
if not self.head:
return 'None'
nodes = []
node = self.head
while node:
nodes.append(repr(node))
node = node.next
return ' -> '.join(nodes) + ' -> None'class myStack:
def __init__(self, cap):
# array to store elements
self.arr = [0] * cap
# maximum size of stack
self.capacity = cap
# index of top element
self.top = -1class myQueue:
def __init__(self, capacity):
# Maximum number of elements the queue can hold.
self.capacity = capacity
# Array to store queue elements.
self.arr = [0] * capacity
# Current number of elements in the queue.
self.size = 0def fn(arr):
n = len(arr)
prefix = [arr[0]]
for i in range(1, n):
prefix.append(prefix[-1] + arr[i])
return prefixdef fn(strs: list[str]):
ans = []
for char in strs:
ans.append(char)
return ''.join(ans)def fn(arr):
n = len(arr)
window = 0
left = 0
ans = 0
for right in range(n):
# TODO: add arr[right] to window
while WINDOW_CONDITION_BROKEN:
# TODO: remove arr[left] from window
left += 1
# TODO: update ans
return ansdef fn(arr):
n = len(arr)
window = 0
left = 0
ans = 0
for right in range(n):
# TODO: add arr[right] to window
while WINDOW_CONDITION_BROKEN:
# TODO: remove arr[left] from window
left += 1
# TODO: update ans
return ansdef fn(arr):
n = len(arr)
window = 0
left = 0
ans = 0
for right in range(n):
# TODO: add arr[right] to window
while WINDOW_CONDITION_BROKEN:
# TODO: remove arr[left] from window
left += 1
# TODO: update ans
return ansfrom collections import deque
def fn(root):
que = deque([root])
ans = 0
while que:
current_length = len(que)
# TODO: logic for current level
for _ in range(current_length):
node = que.popleft()
# TODO: logic
if node.left:
que.append(node.left)
if node.right:
que.append(node.right)
return ansdef dfs(root):
stack = [root]
ans = 0
while stack:
node = stack.pop()
# TODO: logic
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
return ansdef dfs(root):
if not root:
return
ans = 0
# TODO: logic
dfs(root.left)
dfs(root.right)
return ansdef fn(head):
prev = None
curr = head
while curr:
nxt = curr.next
curr.next = prev
prev = curr
curr = nxt
return prevdef fn(head):
slow = head
fast = head
ans = 0
while fast and fast.next:
# TODO: logic
slow = slow.next
fast = fast.next.next
return ansdef fn(matrix: list[list[int]]):
r = len(matrix)
c = len(matrix[0])
create_matrix = [[0 for _ in range(c)] for _ in range(r)]
copy_matrix = [row[:] for row in matrix]def fn(matrix: list[list[int]]):
r = len(matrix)
c = len(matrix[0])
main_diagonal = [matrix[i][i] for i in range(min(r, c))]
anti_diagonal = [matrix[i][~i] for i in range(min(r, c))]def fn(matrix: list[list[int]]):
r = len(matrix)
c = len(matrix[0])
transpose_tuple = zip(*matrix)
transpose = [list(row) for row in transpose_tuple]
rotate_left = transpose[::-1]
rotate_right = [row[::-1] for row in transpose]def fn(arr):
stack = []
ans = 0
for num in arr:
while stack and stack[-1] < num:
# TODO: logic
stack.pop()
stack.append(num)
return ansdef fn(arr):
stack = []
ans = 0
for num in arr:
while stack and stack[-1] > num:
# TODO: logic
stack.pop()
stack.append(num)
return ans