mirror of
https://github.com/krahets/hello-algo.git
synced 2026-10-29 11:44:33 +08:00
fix(ru): align proofreading corrections with the Simplified Chinese original (#2004)
* docs(ru): correct proofreading issues in prose and code examples * docs(ru): align proofreading edits with Simplified Chinese source * fix(ru): repair generated Zig statements and complete comment translations
This commit is contained in:
@@ -9,7 +9,7 @@ import random
|
||||
|
||||
def random_access(nums: list[int]) -> int:
|
||||
"""Случайный доступ к элементу"""
|
||||
# Случайным образом выбрать число из интервала [0, len(nums)-1]
|
||||
# Случайный выбор числа из диапазона [0, len(nums)-1]
|
||||
random_index = random.randint(0, len(nums) - 1)
|
||||
# Получить и вернуть случайный элемент
|
||||
random_num = nums[random_index]
|
||||
@@ -19,7 +19,7 @@ def random_access(nums: list[int]) -> int:
|
||||
# Обратите внимание: list в Python — это динамический массив, его можно расширять напрямую
|
||||
# Для удобства обучения в этой функции list рассматривается как массив неизменяемой длины
|
||||
def extend(nums: list[int], enlarge: int) -> list[int]:
|
||||
"""Увеличить длину массива"""
|
||||
"""Увеличение длины массива"""
|
||||
# Инициализировать массив увеличенной длины
|
||||
res = [0] * (len(nums) + enlarge)
|
||||
# Скопировать все элементы исходного массива в новый массив
|
||||
@@ -30,8 +30,8 @@ def extend(nums: list[int], enlarge: int) -> list[int]:
|
||||
|
||||
|
||||
def insert(nums: list[int], num: int, index: int):
|
||||
"""Вставить элемент num по индексу index в массив"""
|
||||
# Сдвинуть элемент с индексом index и все последующие элементы на одну позицию назад
|
||||
"""Вставка элемента num в массив по индексу index"""
|
||||
# Сдвинуть элемент с индексом index и все последующие элементы на одну позицию вправо
|
||||
for i in range(len(nums) - 1, index, -1):
|
||||
nums[i] = nums[i - 1]
|
||||
# Присвоить num элементу по индексу index
|
||||
@@ -39,8 +39,8 @@ def insert(nums: list[int], num: int, index: int):
|
||||
|
||||
|
||||
def remove(nums: list[int], index: int):
|
||||
"""Удалить элемент по индексу index"""
|
||||
# Сдвинуть все элементы после индекса index на одну позицию вперед
|
||||
"""Удаление элемента по индексу index"""
|
||||
# Сдвинуть все элементы после индекса index на одну позицию влево
|
||||
for i in range(index, len(nums) - 1):
|
||||
nums[i] = nums[i + 1]
|
||||
|
||||
@@ -61,7 +61,7 @@ def traverse(nums: list[int]):
|
||||
|
||||
|
||||
def find(nums: list[int], target: int) -> int:
|
||||
"""Найти заданный элемент в массиве"""
|
||||
"""Поиск заданного элемента в массиве"""
|
||||
for i in range(len(nums)):
|
||||
if nums[i] == target:
|
||||
return i
|
||||
|
||||
@@ -12,14 +12,14 @@ from modules import ListNode, print_linked_list
|
||||
|
||||
|
||||
def insert(n0: ListNode, P: ListNode):
|
||||
"""Вставить узел P после узла n0 в связном списке"""
|
||||
"""Вставка узла P в связный список после узла n0"""
|
||||
n1 = n0.next
|
||||
P.next = n1
|
||||
n0.next = P
|
||||
|
||||
|
||||
def remove(n0: ListNode):
|
||||
"""Удалить первый узел после узла n0 в связном списке"""
|
||||
"""Удаление первого узла после узла n0 из связного списка"""
|
||||
if not n0.next:
|
||||
return
|
||||
# n0 -> P -> n1
|
||||
@@ -29,7 +29,7 @@ def remove(n0: ListNode):
|
||||
|
||||
|
||||
def access(head: ListNode, index: int) -> ListNode | None:
|
||||
"""Доступ к узлу связного списка по индексу index"""
|
||||
"""Доступ к узлу с индексом index в связном списке"""
|
||||
for _ in range(index):
|
||||
if not head:
|
||||
return None
|
||||
@@ -38,7 +38,7 @@ def access(head: ListNode, index: int) -> ListNode | None:
|
||||
|
||||
|
||||
def find(head: ListNode, target: int) -> int:
|
||||
"""Найти в связном списке первый узел со значением target"""
|
||||
"""Поиск первого узла со значением target в связном списке"""
|
||||
index = 0
|
||||
while head:
|
||||
if head.val == target:
|
||||
|
||||
@@ -14,9 +14,9 @@ if __name__ == "__main__":
|
||||
x: int = nums[1]
|
||||
print("\nЭлемент по индексу 1: x =", x)
|
||||
|
||||
# Обновление элемента
|
||||
# Изменение элемента
|
||||
nums[1] = 0
|
||||
print("\nПосле обновления элемента по индексу 1 до 0 nums =", nums)
|
||||
print("\nПосле изменения значения элемента с индексом 1 на 0 nums =", nums)
|
||||
|
||||
# Очистить список
|
||||
nums.clear()
|
||||
|
||||
@@ -31,7 +31,7 @@ class MyList:
|
||||
return self._arr[index]
|
||||
|
||||
def set(self, num: int, index: int):
|
||||
"""Обновление элемента"""
|
||||
"""Изменение элемента"""
|
||||
if index < 0 or index >= self._size:
|
||||
raise IndexError("индекс выходит за границы")
|
||||
self._arr[index] = num
|
||||
@@ -51,7 +51,7 @@ class MyList:
|
||||
# При превышении вместимости по числу элементов запускается расширение
|
||||
if self._size == self.capacity():
|
||||
self.extend_capacity()
|
||||
# Сдвинуть элемент с индексом index и все следующие элементы на одну позицию назад
|
||||
# Сдвинуть элемент с индексом index и все следующие элементы на одну позицию вправо
|
||||
for j in range(self._size - 1, index - 1, -1):
|
||||
self._arr[j + 1] = self._arr[j]
|
||||
self._arr[index] = num
|
||||
@@ -63,7 +63,7 @@ class MyList:
|
||||
if index < 0 or index >= self._size:
|
||||
raise IndexError("индекс выходит за границы")
|
||||
num = self._arr[index]
|
||||
# Сдвинуть все элементы после индекса index на одну позицию вперед
|
||||
# Сдвинуть все элементы после индекса index на одну позицию влево
|
||||
for j in range(index, self._size - 1):
|
||||
self._arr[j] = self._arr[j + 1]
|
||||
# Обновить число элементов
|
||||
@@ -107,9 +107,9 @@ if __name__ == "__main__":
|
||||
num = nums.get(1)
|
||||
print("Элемент по индексу 1: num =", num)
|
||||
|
||||
# Обновление элемента
|
||||
# Изменение элемента
|
||||
nums.set(0, 1)
|
||||
print("После обновления элемента по индексу 1 до 0 nums =", nums.to_array())
|
||||
print("После изменения значения элемента с индексом 1 на 0 nums =", nums.to_array())
|
||||
|
||||
# Проверка механизма расширения
|
||||
for i in range(10):
|
||||
|
||||
@@ -6,7 +6,7 @@ Author: krahets (krahets@163.com)
|
||||
|
||||
|
||||
def dfs(nums: list[int], target: int, i: int, j: int) -> int:
|
||||
"""Бинарный поиск: задача f(i, j)"""
|
||||
"""Двоичный поиск: задача f(i, j)"""
|
||||
# Если интервал пуст, целевой элемент отсутствует, вернуть -1
|
||||
if i > j:
|
||||
return -1
|
||||
@@ -24,7 +24,7 @@ def dfs(nums: list[int], target: int, i: int, j: int) -> int:
|
||||
|
||||
|
||||
def binary_search(nums: list[int], target: int) -> int:
|
||||
"""Бинарный поиск"""
|
||||
"""Двоичный поиск"""
|
||||
n = len(nums)
|
||||
# Решить задачу f(0, n-1)
|
||||
return dfs(nums, target, 0, n - 1)
|
||||
@@ -35,6 +35,6 @@ if __name__ == "__main__":
|
||||
target = 6
|
||||
nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]
|
||||
|
||||
# Бинарный поиск (двусторонне замкнутый интервал)
|
||||
# Двоичный поиск (замкнутый интервал)
|
||||
index = binary_search(nums, target)
|
||||
print("Индекс целевого элемента 6 = ", index)
|
||||
|
||||
@@ -6,8 +6,8 @@ Author: timi (xisunyy@163.com)
|
||||
|
||||
|
||||
def binary_search(nums: list[int], target: int) -> int:
|
||||
"""Бинарный поиск (двусторонне замкнутый интервал)"""
|
||||
# Инициализировать двусторонне замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно
|
||||
"""Двоичный поиск (замкнутый интервал)"""
|
||||
# Инициализировать замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно
|
||||
i, j = 0, len(nums) - 1
|
||||
# Цикл завершается, когда диапазон поиска пуст (при i > j диапазон пуст)
|
||||
while i <= j:
|
||||
@@ -23,8 +23,8 @@ def binary_search(nums: list[int], target: int) -> int:
|
||||
|
||||
|
||||
def binary_search_lcro(nums: list[int], target: int) -> int:
|
||||
"""Бинарный поиск (лево замкнутый, право открытый интервал)"""
|
||||
# Инициализировать лево замкнутый, право открытый интервал [0, n), то есть i и j указывают на первый элемент массива и позицию сразу за последним элементом соответственно
|
||||
"""Двоичный поиск (интервал, замкнутый слева и открытый справа)"""
|
||||
# Инициализация интервала [0, n), замкнутого слева и открытого справа: i указывает на первый элемент массива, а j — на позицию сразу за последним
|
||||
i, j = 0, len(nums)
|
||||
# Цикл завершается, когда диапазон поиска пуст (при i = j диапазон пуст)
|
||||
while i < j:
|
||||
@@ -43,10 +43,10 @@ if __name__ == "__main__":
|
||||
target = 6
|
||||
nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]
|
||||
|
||||
# Бинарный поиск (двусторонне замкнутый интервал)
|
||||
# Двоичный поиск (замкнутый интервал)
|
||||
index = binary_search(nums, target)
|
||||
print("Индекс целевого элемента 6 = ", index)
|
||||
|
||||
# Бинарный поиск (лево замкнутый, право открытый интервал)
|
||||
# Двоичный поиск (интервал, замкнутый слева и открытый справа)
|
||||
index = binary_search_lcro(nums, target)
|
||||
print("Индекс целевого элемента 6 = ", index)
|
||||
|
||||
@@ -12,18 +12,18 @@ from binary_search_insertion import binary_search_insertion
|
||||
|
||||
|
||||
def binary_search_left_edge(nums: list[int], target: int) -> int:
|
||||
"""Бинарный поиск самого левого target"""
|
||||
"""Двоичный поиск самого левого элемента target"""
|
||||
# Эквивалентно поиску точки вставки target
|
||||
i = binary_search_insertion(nums, target)
|
||||
# target не найден, вернуть -1
|
||||
if i == len(nums) or nums[i] != target:
|
||||
return -1
|
||||
# Найти target и вернуть индекс i
|
||||
# target найден, возвращается индекс i
|
||||
return i
|
||||
|
||||
|
||||
def binary_search_right_edge(nums: list[int], target: int) -> int:
|
||||
"""Бинарный поиск самого правого target"""
|
||||
"""Двоичный поиск самого правого элемента target"""
|
||||
# Преобразовать задачу в поиск самого левого target + 1
|
||||
i = binary_search_insertion(nums, target + 1)
|
||||
# j указывает на самый правый target, а i — на первый элемент больше target
|
||||
@@ -31,7 +31,7 @@ def binary_search_right_edge(nums: list[int], target: int) -> int:
|
||||
# target не найден, вернуть -1
|
||||
if j == -1 or nums[j] != target:
|
||||
return -1
|
||||
# Найти target и вернуть индекс j
|
||||
# target найден, возвращается индекс j
|
||||
return j
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ if __name__ == "__main__":
|
||||
nums = [1, 3, 6, 6, 6, 6, 6, 10, 12, 15]
|
||||
print(f"\nМассив nums = {nums}")
|
||||
|
||||
# Бинарный поиск левой и правой границы
|
||||
# Двоичный поиск левой и правой границы
|
||||
for target in [6, 7]:
|
||||
index = binary_search_left_edge(nums, target)
|
||||
print(f"Индекс самого левого элемента {target} равен {index}")
|
||||
|
||||
@@ -6,8 +6,8 @@ Author: krahets (krahets@163.com)
|
||||
|
||||
|
||||
def binary_search_insertion_simple(nums: list[int], target: int) -> int:
|
||||
"""Бинарный поиск точки вставки (без повторяющихся элементов)"""
|
||||
i, j = 0, len(nums) - 1 # Инициализировать двусторонне замкнутый интервал [0, n-1]
|
||||
"""Двоичный поиск точки вставки (без повторяющихся элементов)"""
|
||||
i, j = 0, len(nums) - 1 # Инициализировать замкнутый интервал [0, n-1]
|
||||
while i <= j:
|
||||
m = (i + j) // 2 # Вычислить индекс середины m
|
||||
if nums[m] < target:
|
||||
@@ -15,14 +15,14 @@ def binary_search_insertion_simple(nums: list[int], target: int) -> int:
|
||||
elif nums[m] > target:
|
||||
j = m - 1 # target находится в интервале [i, m-1]
|
||||
else:
|
||||
return m # Найти target и вернуть точку вставки m
|
||||
return m # target найден, возвращается точка вставки m
|
||||
# target не найден, вернуть точку вставки i
|
||||
return i
|
||||
|
||||
|
||||
def binary_search_insertion(nums: list[int], target: int) -> int:
|
||||
"""Бинарный поиск точки вставки (с повторяющимися элементами)"""
|
||||
i, j = 0, len(nums) - 1 # Инициализировать двусторонне замкнутый интервал [0, n-1]
|
||||
"""Двоичный поиск точки вставки (с повторяющимися элементами)"""
|
||||
i, j = 0, len(nums) - 1 # Инициализировать замкнутый интервал [0, n-1]
|
||||
while i <= j:
|
||||
m = (i + j) // 2 # Вычислить индекс середины m
|
||||
if nums[m] < target:
|
||||
@@ -40,7 +40,7 @@ if __name__ == "__main__":
|
||||
# Массив без повторяющихся элементов
|
||||
nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]
|
||||
print(f"\nМассив nums = {nums}")
|
||||
# Бинарный поиск точки вставки
|
||||
# Двоичный поиск точки вставки
|
||||
for target in [6, 9]:
|
||||
index = binary_search_insertion_simple(nums, target)
|
||||
print(f"Индекс позиции вставки элемента {target} равен {index}")
|
||||
@@ -48,7 +48,7 @@ if __name__ == "__main__":
|
||||
# Массив с повторяющимися элементами
|
||||
nums = [1, 3, 6, 6, 6, 6, 6, 10, 12, 15]
|
||||
print(f"\nМассив nums = {nums}")
|
||||
# Бинарный поиск точки вставки
|
||||
# Двоичный поиск точки вставки
|
||||
for target in [2, 6, 20]:
|
||||
index = binary_search_insertion(nums, target)
|
||||
print(f"Индекс позиции вставки элемента {target} равен {index}")
|
||||
|
||||
@@ -24,7 +24,7 @@ def linear_search_linkedlist(head: ListNode, target: int) -> ListNode | None:
|
||||
"""Линейный поиск (связный список)"""
|
||||
# Обойти связный список
|
||||
while head:
|
||||
if head.val == target: # Найти целевой узел и вернуть его
|
||||
if head.val == target: # Целевой узел найден, возвращается этот узел
|
||||
return head
|
||||
head = head.next
|
||||
return None # Целевой узел не найден, вернуть None
|
||||
|
||||
Reference in New Issue
Block a user