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)
prefix = [arr[0]]
for i in range(1, n):
prefix.append(prefix[-1] + arr[i])
return prefixdef 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, target):
left = 0
right = len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
# TODO: logic
return
if arr[mid] > target:
right = mid - 1
else:
left = mid + 1
return leftfrom collections import deque
def fn(graph):
que = deque([START_NODE])
seen = {START_NODE}
ans = 0
while que:
node = que.popleft()
# TODO: logic
for neighbor in graph[node]:
if neighbor not in seen:
seen.add(neighbor)
que.append(neighbor)
return ansdef fn(graph):
def dfs(node):
ans = 0
# TODO: logic
for neighbor in graph[node]:
if neighbor not in seen:
seen.add(neighbor)
ans += dfs(neighbor)
return ans
seen = {START_NODE}
return dfs(START_NODE)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)] = Nonedef fn(arr):
window = set()
ans = 0
left = 0
for right, ELEMENT in enumerate(arr):
# TODO: add arr[right] to window
while WINDOW_CONDITION_BROKEN:
# TODO: remove arr[left] from window
left += 1
# TODO: update ans
return ansdef fn(head):
slow = head
fast = head
ans = 0
while fast and fast.next:
# TODO: logic
slow = slow.next
fast = fast.next.next
return ansdef merge_sort(arr: list) -> list:
n = len(arr)
if n <= 1:
return arr
mid = n // 2
left = merge_sort(arr[:mid])
right = merge_sort(arr[mid:])
return merge(left, right)
def merge(left: list, right: list) -> list:
output = []
while left and right:
min_num = left.pop(0) if left[0] <= right[0] else right.pop(0)
output.append(min_num)
output.extend(left)
output.extend(right)
return outputdef kadane(arr: list[int]) -> int:
curr_sub = max_sub = arr[0]
for num in arr[1:]:
curr_sub = max(curr_sub + num, num)
max_sub = max(max_sub, curr_sub)
return max_subfrom heapq import heappop, heappush
def dijkstras(graph: list[list[tuple[int, int]]], source: int) -> list[int]:
n = len(graph)
distances = [float('inf')] * n
distances[source] = 0
heap = [(0, source)]
while heap:
curr_dist, node = heappop(heap)
if curr_dist > distances[node]:
continue
for neighbor, weight in graph[node]:
dist = curr_dist + weight
if dist < distances[neighbor]:
distances[neighbor] = dist
heappush(heap, (dist, neighbor))
return distancesclass UnionFind:
def __init__(self, n: int) -> None:
self.root = list(range(n))
self.rank = [1] * n
def find(self, a: int) -> int:
return a if a == self.root[a] else self.find(self.root[a])
def union(self, a: int, b: int) -> None:
root_a = self.find(a)
root_b = self.find(b)
if root_a != root_b:
if self.rank[root_a] < self.rank[root_b]:
self.root[root_a] = root_b
elif self.rank[root_a] > self.rank[root_b]:
self.root[root_b] = root_a
else:
self.root[root_b] = root_a
self.rank[root_a] += 1
def connected(self, a: int, b: int) -> bool:
return self.find(a) == self.find(b)
def __repr__(self) -> str:
n = len(self.root)
lines = []
components = {}
for i in range(n):
root = self.find(i)
if root not in components:
components[root] = []
components[root].append(i)
for component in components.values():
lines.append(' - '.join(f'({node})' for node in component))
return '\n'.join(lines)def set_kth_bit(num: int, k: int) -> int:
return num | (1 << k)def swap_variables(num1: int, num2: int) -> tuple:
num1 ^= num2
num2 ^= num1
num1 ^= num2
return num1, num2def test_kth_bit(num: int, k: int) -> bool:
return num & (1 << k) != 0def toggle_kth_bit(num: int, k: int) -> int:
return num ^ (1 << k)