From 71a773df64fa20a31e32c23e01e6d29442d54adb Mon Sep 17 00:00:00 2001 From: Yudong Jin Date: Tue, 27 Oct 2026 18:19:11 +0800 Subject: [PATCH] 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 --- .../c/chapter_array_and_linkedlist/array.c | 16 ++--- .../linked_list.c | 8 +-- .../c/chapter_array_and_linkedlist/my_list.c | 6 +- .../binary_search_recur.c | 6 +- ru/codes/c/chapter_searching/binary_search.c | 12 ++-- .../c/chapter_searching/binary_search_edge.c | 14 ++--- .../binary_search_insertion.c | 14 ++--- .../linkedlist_deque.c | 2 +- .../chapter_array_and_linkedlist/array.cpp | 14 ++--- .../linked_list.cpp | 8 +-- .../cpp/chapter_array_and_linkedlist/list.cpp | 4 +- .../chapter_array_and_linkedlist/my_list.cpp | 10 ++-- .../binary_search_recur.cpp | 6 +- .../cpp/chapter_searching/binary_search.cpp | 12 ++-- .../chapter_searching/binary_search_edge.cpp | 14 ++--- .../binary_search_insertion.cpp | 14 ++--- .../cpp/chapter_searching/linear_search.cpp | 2 +- .../linkedlist_deque.cpp | 2 +- .../chapter_array_and_linkedlist/array.cs | 14 ++--- .../linked_list.cs | 8 +-- .../chapter_array_and_linkedlist/list.cs | 4 +- .../chapter_array_and_linkedlist/my_list.cs | 10 ++-- .../binary_search_recur.cs | 6 +- .../csharp/chapter_searching/binary_search.cs | 12 ++-- .../chapter_searching/binary_search_edge.cs | 10 ++-- .../binary_search_insertion.cs | 14 ++--- .../csharp/chapter_searching/linear_search.cs | 2 +- .../chapter_array_and_linkedlist/array.dart | 14 ++--- .../linked_list.dart | 8 +-- .../chapter_array_and_linkedlist/list.dart | 4 +- .../chapter_array_and_linkedlist/my_list.dart | 10 ++-- .../binary_search_recur.dart | 6 +- .../dart/chapter_searching/binary_search.dart | 12 ++-- .../chapter_searching/binary_search_edge.dart | 10 ++-- .../binary_search_insertion.dart | 14 ++--- .../dart/chapter_searching/linear_search.dart | 2 +- .../go/chapter_array_and_linkedlist/array.go | 14 ++--- .../linked_list.go | 8 +-- .../chapter_array_and_linkedlist/list_test.go | 6 +- .../chapter_array_and_linkedlist/my_list.go | 6 +- .../my_list_test.go | 4 +- .../binary_search_recur.go | 4 +- .../go/chapter_searching/binary_search.go | 8 +-- .../chapter_searching/binary_search_edge.go | 8 +-- .../binary_search_insertion.go | 10 ++-- .../chapter_searching/binary_search_test.go | 8 +-- .../go/chapter_searching/linear_search.go | 2 +- .../chapter_array_and_linkedlist/array.java | 14 ++--- .../linked_list.java | 8 +-- .../chapter_array_and_linkedlist/list.java | 4 +- .../chapter_array_and_linkedlist/my_list.java | 10 ++-- .../binary_search_recur.java | 6 +- .../java/chapter_searching/binary_search.java | 12 ++-- .../chapter_searching/binary_search_edge.java | 10 ++-- .../binary_search_insertion.java | 14 ++--- .../java/chapter_searching/linear_search.java | 2 +- .../chapter_array_and_linkedlist/array.js | 14 ++--- .../linked_list.js | 8 +-- .../chapter_array_and_linkedlist/list.js | 4 +- .../chapter_array_and_linkedlist/my_list.js | 10 ++-- .../binary_search_recur.js | 6 +- .../chapter_searching/binary_search.js | 12 ++-- .../chapter_searching/binary_search_edge.js | 10 ++-- .../binary_search_insertion.js | 14 ++--- .../chapter_searching/linear_search.js | 2 +- .../linkedlist_deque.js | 2 +- .../chapter_array_and_linkedlist/array.kt | 14 ++--- .../linked_list.kt | 8 +-- .../chapter_array_and_linkedlist/list.kt | 4 +- .../chapter_array_and_linkedlist/my_list.kt | 10 ++-- .../binary_search_recur.kt | 6 +- .../kotlin/chapter_searching/binary_search.kt | 12 ++-- .../chapter_searching/binary_search_edge.kt | 10 ++-- .../binary_search_insertion.kt | 14 ++--- .../kotlin/chapter_searching/linear_search.kt | 2 +- .../chapter_array_and_linkedlist/array.py | 14 ++--- .../linked_list.py | 8 +-- .../chapter_array_and_linkedlist/list.py | 4 +- .../chapter_array_and_linkedlist/my_list.py | 10 ++-- .../binary_search_recur.py | 6 +- .../python/chapter_searching/binary_search.py | 12 ++-- .../chapter_searching/binary_search_edge.py | 10 ++-- .../binary_search_insertion.py | 14 ++--- .../python/chapter_searching/linear_search.py | 2 +- .../chapter_array_and_linkedlist/array.md | 10 ++-- .../linked_list.md | 8 +-- .../binary_search_recur.md | 2 +- .../chapter_searching/binary_search.md | 4 +- .../chapter_searching/binary_search_edge.md | 4 +- .../binary_search_insertion.md | 4 +- .../chapter_array_and_linkedlist/array.rb | 10 ++-- .../linked_list.rb | 6 +- .../ruby/chapter_array_and_linkedlist/list.rb | 4 +- .../chapter_array_and_linkedlist/my_list.rb | 8 +-- .../binary_search_recur.rb | 6 +- .../ruby/chapter_searching/binary_search.rb | 12 ++-- .../chapter_searching/binary_search_edge.rb | 10 ++-- .../binary_search_insertion.rb | 14 ++--- .../ruby/chapter_searching/linear_search.rb | 2 +- .../chapter_array_and_linkedlist/array.rs | 14 ++--- .../linked_list.rs | 8 +-- .../rust/chapter_array_and_linkedlist/list.rs | 4 +- .../chapter_array_and_linkedlist/my_list.rs | 10 ++-- .../binary_search_recur.rs | 6 +- .../rust/chapter_searching/binary_search.rs | 12 ++-- .../chapter_searching/binary_search_edge.rs | 10 ++-- .../binary_search_insertion.rs | 12 ++-- .../rust/chapter_searching/linear_search.rs | 4 +- .../chapter_array_and_linkedlist/array.swift | 14 ++--- .../linked_list.swift | 8 +-- .../chapter_array_and_linkedlist/list.swift | 4 +- .../my_list.swift | 10 ++-- .../binary_search_recur.swift | 6 +- .../chapter_searching/binary_search.swift | 12 ++-- .../binary_search_edge.swift | 10 ++-- .../binary_search_insertion.swift | 14 ++--- .../binary_search_insertion_target.swift | 14 ++--- .../chapter_searching/linear_search.swift | 2 +- .../chapter_array_and_linkedlist/array.ts | 14 ++--- .../linked_list.ts | 8 +-- .../chapter_array_and_linkedlist/list.ts | 4 +- .../chapter_array_and_linkedlist/my_list.ts | 10 ++-- .../binary_search_recur.ts | 6 +- .../chapter_searching/binary_search.ts | 12 ++-- .../chapter_searching/binary_search_edge.ts | 10 ++-- .../binary_search_insertion.ts | 14 ++--- .../chapter_searching/linear_search.ts | 2 +- .../linkedlist_deque.ts | 2 +- .../chapter_array_and_linkedlist/array.zig | 14 ++--- .../linked_list.zig | 28 ++++++--- .../zig/chapter_array_and_linkedlist/list.zig | 4 +- .../chapter_array_and_linkedlist/my_list.zig | 36 ++++++++---- .../zig/chapter_searching/binary_search.zig | 12 ++-- .../zig/chapter_searching/linear_search.zig | 4 +- .../linked_list.md | 34 +++++------ ru/docs/chapter_array_and_linkedlist/list.md | 58 +++++++++---------- .../ram_and_cache.md | 4 +- .../basic_data_types.md | 2 +- .../chapter_data_structure/number_encoding.md | 2 +- ru/docs/chapter_hashing/hash_algorithm.md | 4 +- ru/docs/chapter_hashing/hash_collision.md | 2 +- ru/docs/chapter_searching/binary_search.md | 4 +- .../binary_search_insertion.md | 2 +- ru/docs/chapter_searching/exercises.md | 6 +- .../replace_linear_by_hashing.md | 2 +- .../searching_algorithm_revisited.md | 4 +- ru/docs/chapter_stack_and_queue/deque.md | 14 ++--- ru/docs/chapter_stack_and_queue/queue.md | 2 +- ru/mkdocs.yml | 2 +- 149 files changed, 675 insertions(+), 649 deletions(-) diff --git a/ru/codes/c/chapter_array_and_linkedlist/array.c b/ru/codes/c/chapter_array_and_linkedlist/array.c index cf3c4d9ef..fb9524dc2 100644 --- a/ru/codes/c/chapter_array_and_linkedlist/array.c +++ b/ru/codes/c/chapter_array_and_linkedlist/array.c @@ -8,14 +8,14 @@ /* Случайный доступ к элементу */ int randomAccess(int *nums, int size) { - // Случайным образом выбрать число из интервала [0, size) + // Случайный выбор числа из диапазона [0, size) int randomIndex = rand() % size; // Получить и вернуть случайный элемент int randomNum = nums[randomIndex]; return randomNum; } -/* Увеличить длину массива */ +/* Увеличение длины массива */ int *extend(int *nums, int size, int enlarge) { // Инициализировать массив увеличенной длины int *res = (int *)malloc(sizeof(int) * (size + enlarge)); @@ -31,9 +31,9 @@ int *extend(int *nums, int size, int enlarge) { return res; } -/* Вставить элемент num по индексу index в массив */ +/* Вставка элемента num в массив по индексу index */ void insert(int *nums, int size, int num, int index) { - // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию вправо for (int i = size - 1; i > index; i--) { nums[i] = nums[i - 1]; } @@ -41,10 +41,10 @@ void insert(int *nums, int size, int num, int index) { nums[index] = num; } -/* Удалить элемент по индексу index */ +/* Удаление элемента по индексу index */ // Внимание: stdio.h уже использует ключевое слово remove void removeItem(int *nums, int size, int index) { - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for (int i = index; i < size - 1; i++) { nums[i] = nums[i + 1]; } @@ -59,7 +59,7 @@ void traverse(int *nums, int size) { } } -/* Найти заданный элемент в массиве */ +/* Поиск заданного элемента в массиве */ int find(int *nums, int size, int target) { for (int i = 0; i < size; i++) { if (nums[i] == target) @@ -70,7 +70,7 @@ int find(int *nums, int size, int target) { /* Driver Code */ int main() { - /* Инициализировать генератор случайных чисел один раз */ + /* Инициализация генератора случайных чисел (выполняется один раз) */ srand((unsigned)time(NULL)); /* Инициализация массива */ diff --git a/ru/codes/c/chapter_array_and_linkedlist/linked_list.c b/ru/codes/c/chapter_array_and_linkedlist/linked_list.c index 99f595b59..8c68537af 100644 --- a/ru/codes/c/chapter_array_and_linkedlist/linked_list.c +++ b/ru/codes/c/chapter_array_and_linkedlist/linked_list.c @@ -6,14 +6,14 @@ #include "../utils/common.h" -/* Вставить узел P после узла n0 в связном списке */ +/* Вставка узла P в связный список после узла n0 */ void insert(ListNode *n0, ListNode *P) { ListNode *n1 = n0->next; P->next = n1; n0->next = P; } -/* Удалить первый узел после узла n0 в связном списке */ +/* Удаление первого узла после узла n0 из связного списка */ // Внимание: stdio.h уже использует ключевое слово remove void removeItem(ListNode *n0) { if (!n0->next) @@ -26,7 +26,7 @@ void removeItem(ListNode *n0) { free(P); } -/* Доступ к узлу связного списка по индексу index */ +/* Доступ к узлу с индексом index в связном списке */ ListNode *access(ListNode *head, int index) { for (int i = 0; i < index; i++) { if (head == NULL) @@ -36,7 +36,7 @@ ListNode *access(ListNode *head, int index) { return head; } -/* Найти в связном списке первый узел со значением target */ +/* Поиск первого узла со значением target в связном списке */ int find(ListNode *head, int target) { int index = 0; while (head) { diff --git a/ru/codes/c/chapter_array_and_linkedlist/my_list.c b/ru/codes/c/chapter_array_and_linkedlist/my_list.c index 3817de31a..fb893cdfb 100644 --- a/ru/codes/c/chapter_array_and_linkedlist/my_list.c +++ b/ru/codes/c/chapter_array_and_linkedlist/my_list.c @@ -48,7 +48,7 @@ int get(MyList *nums, int index) { return nums->arr[index]; } -/* Обновление элемента */ +/* Изменение элемента */ void set(MyList *nums, int index, int num) { assert(index >= 0 && index < nums->size); nums->arr[index] = num; @@ -141,9 +141,9 @@ int main() { int num = get(nums, 1); printf("Элемент по индексу 1: num = %d\n", num); - /* Обновление элемента */ + /* Изменение элемента */ set(nums, 1, 0); - printf("После обновления элемента по индексу 1 на 0 nums = "); + printf("После изменения элемента по индексу 1 на 0 nums = "); printArray(toArray(nums), size(nums)); /* Проверка механизма расширения */ diff --git a/ru/codes/c/chapter_divide_and_conquer/binary_search_recur.c b/ru/codes/c/chapter_divide_and_conquer/binary_search_recur.c index 89bdbb8df..a211810b0 100644 --- a/ru/codes/c/chapter_divide_and_conquer/binary_search_recur.c +++ b/ru/codes/c/chapter_divide_and_conquer/binary_search_recur.c @@ -6,7 +6,7 @@ #include "../utils/common.h" -/* Бинарный поиск: задача f(i, j) */ +/* Двоичный поиск: задача f(i, j) */ int dfs(int nums[], int target, int i, int j) { // Если интервал пуст, целевой элемент отсутствует, вернуть -1 if (i > j) { @@ -26,7 +26,7 @@ int dfs(int nums[], int target, int i, int j) { } } -/* Бинарный поиск */ +/* Двоичный поиск */ int binarySearch(int nums[], int target, int numsSize) { int n = numsSize; // Решить задачу f(0, n-1) @@ -39,7 +39,7 @@ int main() { int nums[] = {1, 3, 6, 8, 12, 15, 23, 26, 31, 35}; int numsSize = sizeof(nums) / sizeof(nums[0]); - // Бинарный поиск (двусторонне замкнутый интервал) + // Двоичный поиск (замкнутый интервал) int index = binarySearch(nums, target, numsSize); printf("Индекс целевого элемента 6 = %d\n", index); diff --git a/ru/codes/c/chapter_searching/binary_search.c b/ru/codes/c/chapter_searching/binary_search.c index 250cb4e8c..e9f6e8921 100644 --- a/ru/codes/c/chapter_searching/binary_search.c +++ b/ru/codes/c/chapter_searching/binary_search.c @@ -6,9 +6,9 @@ #include "../utils/common.h" -/* Бинарный поиск (двусторонне замкнутый интервал) */ +/* Двоичный поиск (замкнутый интервал) */ int binarySearch(int *nums, int len, int target) { - // Инициализировать двусторонне замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно + // Инициализировать замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно int i = 0, j = len - 1; // Цикл завершается, когда диапазон поиска пуст (при i > j диапазон пуст) while (i <= j) { @@ -24,9 +24,9 @@ int binarySearch(int *nums, int len, int target) { return -1; } -/* Бинарный поиск (лево замкнутый, право открытый интервал) */ +/* Двоичный поиск (интервал, замкнутый слева и открытый справа) */ int binarySearchLCRO(int *nums, int len, int target) { - // Инициализировать лево замкнутый, право открытый интервал [0, n), то есть i и j указывают на первый элемент массива и позицию сразу за последним элементом соответственно + // Инициализация интервала [0, n), замкнутого слева и открытого справа: i указывает на первый элемент массива, а j — на позицию сразу за последним int i = 0, j = len; // Цикл завершается, когда диапазон поиска пуст (при i = j диапазон пуст) while (i < j) { @@ -47,11 +47,11 @@ int main() { int target = 6; int nums[10] = {1, 3, 6, 8, 12, 15, 23, 26, 31, 35}; - /* Бинарный поиск (двусторонне замкнутый интервал) */ + /* Двоичный поиск (замкнутый интервал) */ int index = binarySearch(nums, 10, target); printf("Индекс целевого элемента 6 = %d\n", index); - /* Бинарный поиск (лево замкнутый, право открытый интервал) */ + /* Двоичный поиск (интервал, замкнутый слева и открытый справа) */ index = binarySearchLCRO(nums, 10, target); printf("Индекс целевого элемента 6 = %d\n", index); diff --git a/ru/codes/c/chapter_searching/binary_search_edge.c b/ru/codes/c/chapter_searching/binary_search_edge.c index 23c059b39..f5bcea4f7 100644 --- a/ru/codes/c/chapter_searching/binary_search_edge.c +++ b/ru/codes/c/chapter_searching/binary_search_edge.c @@ -6,9 +6,9 @@ #include "../utils/common.h" -/* Бинарный поиск точки вставки (с повторяющимися элементами) */ +/* Двоичный поиск точки вставки (с повторяющимися элементами) */ int binarySearchInsertion(int *nums, int numSize, int target) { - int i = 0, j = numSize - 1; // Инициализировать двусторонне замкнутый интервал [0, n-1] + int i = 0, j = numSize - 1; // Инициализировать замкнутый интервал [0, n-1] while (i <= j) { int m = i + (j - i) / 2; // Вычислить индекс середины m if (nums[m] < target) { @@ -21,7 +21,7 @@ int binarySearchInsertion(int *nums, int numSize, int target) { return i; } -/* Бинарный поиск самого левого target */ +/* Двоичный поиск самого левого элемента target */ int binarySearchLeftEdge(int *nums, int numSize, int target) { // Эквивалентно поиску точки вставки target int i = binarySearchInsertion(nums, numSize, target); @@ -29,11 +29,11 @@ int binarySearchLeftEdge(int *nums, int numSize, int target) { if (i == numSize || nums[i] != target) { return -1; } - // Найти target и вернуть индекс i + // target найден, возвращается индекс i return i; } -/* Бинарный поиск самого правого target */ +/* Двоичный поиск самого правого элемента target */ int binarySearchRightEdge(int *nums, int numSize, int target) { // Преобразовать задачу в поиск самого левого target + 1 int i = binarySearchInsertion(nums, numSize, target + 1); @@ -43,7 +43,7 @@ int binarySearchRightEdge(int *nums, int numSize, int target) { if (j == -1 || nums[j] != target) { return -1; } - // Найти target и вернуть индекс j + // target найден, возвращается индекс j return j; } @@ -54,7 +54,7 @@ int main() { printf("\nМассив nums = "); printArray(nums, sizeof(nums) / sizeof(nums[0])); - // Бинарный поиск левой и правой границы + // Двоичный поиск левой и правой границы int targets[] = {6, 7}; for (int i = 0; i < sizeof(targets) / sizeof(targets[0]); i++) { int index = binarySearchLeftEdge(nums, sizeof(nums) / sizeof(nums[0]), targets[i]); diff --git a/ru/codes/c/chapter_searching/binary_search_insertion.c b/ru/codes/c/chapter_searching/binary_search_insertion.c index f33ba957d..89bab44eb 100644 --- a/ru/codes/c/chapter_searching/binary_search_insertion.c +++ b/ru/codes/c/chapter_searching/binary_search_insertion.c @@ -6,9 +6,9 @@ #include "../utils/common.h" -/* Бинарный поиск точки вставки (без повторяющихся элементов) */ +/* Двоичный поиск точки вставки (без повторяющихся элементов) */ int binarySearchInsertionSimple(int *nums, int numSize, int target) { - int i = 0, j = numSize - 1; // Инициализировать двусторонне замкнутый интервал [0, n-1] + int i = 0, j = numSize - 1; // Инициализировать замкнутый интервал [0, n-1] while (i <= j) { int m = i + (j - i) / 2; // Вычислить индекс середины m if (nums[m] < target) { @@ -16,16 +16,16 @@ int binarySearchInsertionSimple(int *nums, int numSize, int target) { } else if (nums[m] > target) { j = m - 1; // target находится в интервале [i, m-1] } else { - return m; // Найти target и вернуть точку вставки m + return m; // target найден, возвращается точка вставки m } } // target не найден, вернуть точку вставки i return i; } -/* Бинарный поиск точки вставки (с повторяющимися элементами) */ +/* Двоичный поиск точки вставки (с повторяющимися элементами) */ int binarySearchInsertion(int *nums, int numSize, int target) { - int i = 0, j = numSize - 1; // Инициализировать двусторонне замкнутый интервал [0, n-1] + int i = 0, j = numSize - 1; // Инициализировать замкнутый интервал [0, n-1] while (i <= j) { int m = i + (j - i) / 2; // Вычислить индекс середины m if (nums[m] < target) { @@ -46,7 +46,7 @@ int main() { int nums1[] = {1, 3, 6, 8, 12, 15, 23, 26, 31, 35}; printf("\nМассив nums = "); printArray(nums1, sizeof(nums1) / sizeof(nums1[0])); - // Бинарный поиск точки вставки + // Двоичный поиск точки вставки int targets1[] = {6, 9}; for (int i = 0; i < sizeof(targets1) / sizeof(targets1[0]); i++) { int index = binarySearchInsertionSimple(nums1, sizeof(nums1) / sizeof(nums1[0]), targets1[i]); @@ -57,7 +57,7 @@ int main() { int nums2[] = {1, 3, 6, 6, 6, 6, 6, 10, 12, 15}; printf("\nМассив nums = "); printArray(nums2, sizeof(nums2) / sizeof(nums2[0])); - // Бинарный поиск точки вставки + // Двоичный поиск точки вставки int targets2[] = {2, 6, 20}; for (int i = 0; i < sizeof(targets2) / sizeof(int); i++) { int index = binarySearchInsertion(nums2, sizeof(nums2) / sizeof(nums2[0]), targets2[i]); diff --git a/ru/codes/c/chapter_stack_and_queue/linkedlist_deque.c b/ru/codes/c/chapter_stack_and_queue/linkedlist_deque.c index 9d4053451..e1f346d3f 100644 --- a/ru/codes/c/chapter_stack_and_queue/linkedlist_deque.c +++ b/ru/codes/c/chapter_stack_and_queue/linkedlist_deque.c @@ -118,7 +118,7 @@ int pop(LinkedListDeque *deque, bool isFront) { // Если в очереди один элемент, начало и конец указывают на один узел if (deque->queSize == 1) { val = deque->front->val; - delDoublyListNode(deque->front); // Освобождаем общий узел один раз + delDoublyListNode(deque->front); // Оба указателя указывают на один узел, поэтому достаточно освободить его один раз deque->front = NULL; deque->rear = NULL; } diff --git a/ru/codes/cpp/chapter_array_and_linkedlist/array.cpp b/ru/codes/cpp/chapter_array_and_linkedlist/array.cpp index 50ca477c8..00b77cae0 100644 --- a/ru/codes/cpp/chapter_array_and_linkedlist/array.cpp +++ b/ru/codes/cpp/chapter_array_and_linkedlist/array.cpp @@ -8,14 +8,14 @@ /* Случайный доступ к элементу */ int randomAccess(int *nums, int size) { - // Случайным образом выбрать число из интервала [0, size) + // Случайный выбор числа из диапазона [0, size) int randomIndex = rand() % size; // Получить и вернуть случайный элемент int randomNum = nums[randomIndex]; return randomNum; } -/* Увеличить длину массива */ +/* Увеличение длины массива */ int *extend(int *nums, int size, int enlarge) { // Инициализировать массив увеличенной длины int *res = new int[size + enlarge]; @@ -29,9 +29,9 @@ int *extend(int *nums, int size, int enlarge) { return res; } -/* Вставить элемент num по индексу index в массив */ +/* Вставка элемента num в массив по индексу index */ void insert(int *nums, int size, int num, int index) { - // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию вправо for (int i = size - 1; i > index; i--) { nums[i] = nums[i - 1]; } @@ -39,9 +39,9 @@ void insert(int *nums, int size, int num, int index) { nums[index] = num; } -/* Удалить элемент по индексу index */ +/* Удаление элемента по индексу index */ void remove(int *nums, int size, int index) { - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for (int i = index; i < size - 1; i++) { nums[i] = nums[i + 1]; } @@ -56,7 +56,7 @@ void traverse(int *nums, int size) { } } -/* Найти заданный элемент в массиве */ +/* Поиск заданного элемента в массиве */ int find(int *nums, int size, int target) { for (int i = 0; i < size; i++) { if (nums[i] == target) diff --git a/ru/codes/cpp/chapter_array_and_linkedlist/linked_list.cpp b/ru/codes/cpp/chapter_array_and_linkedlist/linked_list.cpp index f0f52242a..32c8dd21c 100644 --- a/ru/codes/cpp/chapter_array_and_linkedlist/linked_list.cpp +++ b/ru/codes/cpp/chapter_array_and_linkedlist/linked_list.cpp @@ -6,14 +6,14 @@ #include "../utils/common.hpp" -/* Вставить узел P после узла n0 в связном списке */ +/* Вставка узла P в связный список после узла n0 */ void insert(ListNode *n0, ListNode *P) { ListNode *n1 = n0->next; P->next = n1; n0->next = P; } -/* Удалить первый узел после узла n0 в связном списке */ +/* Удаление первого узла после узла n0 из связного списка */ void remove(ListNode *n0) { if (n0->next == nullptr) return; @@ -25,7 +25,7 @@ void remove(ListNode *n0) { delete P; } -/* Доступ к узлу связного списка по индексу index */ +/* Доступ к узлу с индексом index в связном списке */ ListNode *access(ListNode *head, int index) { for (int i = 0; i < index; i++) { if (head == nullptr) @@ -35,7 +35,7 @@ ListNode *access(ListNode *head, int index) { return head; } -/* Найти в связном списке первый узел со значением target */ +/* Поиск первого узла со значением target в связном списке */ int find(ListNode *head, int target) { int index = 0; while (head != nullptr) { diff --git a/ru/codes/cpp/chapter_array_and_linkedlist/list.cpp b/ru/codes/cpp/chapter_array_and_linkedlist/list.cpp index 04c7956eb..4eb594e2f 100644 --- a/ru/codes/cpp/chapter_array_and_linkedlist/list.cpp +++ b/ru/codes/cpp/chapter_array_and_linkedlist/list.cpp @@ -17,9 +17,9 @@ int main() { int num = nums[1]; cout << "Элемент по индексу 1: num = " << num << endl; - /* Обновление элемента */ + /* Изменение элемента */ nums[1] = 0; - cout << "После обновления элемента по индексу 1 на 0 nums = "; + cout << "После изменения элемента по индексу 1 на 0 nums = "; printVector(nums); /* Очистить список */ diff --git a/ru/codes/cpp/chapter_array_and_linkedlist/my_list.cpp b/ru/codes/cpp/chapter_array_and_linkedlist/my_list.cpp index 4ced0b491..65c538baf 100644 --- a/ru/codes/cpp/chapter_array_and_linkedlist/my_list.cpp +++ b/ru/codes/cpp/chapter_array_and_linkedlist/my_list.cpp @@ -43,7 +43,7 @@ class MyList { return arr[index]; } - /* Обновление элемента */ + /* Изменение элемента */ void set(int index, int num) { if (index < 0 || index >= size()) throw out_of_range("индекс выходит за границы"); @@ -67,7 +67,7 @@ class MyList { // При превышении вместимости по числу элементов запускается расширение if (size() == capacity()) extendCapacity(); - // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию вправо for (int j = size() - 1; j >= index; j--) { arr[j + 1] = arr[j]; } @@ -81,7 +81,7 @@ class MyList { if (index < 0 || index >= size()) throw out_of_range("индекс выходит за границы"); int num = arr[index]; - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for (int j = index; j < size() - 1; j++) { arr[j] = arr[j + 1]; } @@ -148,9 +148,9 @@ int main() { int num = nums->get(1); cout << "Элемент по индексу 1: num = " << num << endl; - /* Обновление элемента */ + /* Изменение элемента */ nums->set(1, 0); - cout << "После обновления элемента по индексу 1 на 0 nums = "; + cout << "После изменения элемента по индексу 1 на 0 nums = "; vec = nums->toVector(); printVector(vec); diff --git a/ru/codes/cpp/chapter_divide_and_conquer/binary_search_recur.cpp b/ru/codes/cpp/chapter_divide_and_conquer/binary_search_recur.cpp index 2281bb66b..760f4f681 100644 --- a/ru/codes/cpp/chapter_divide_and_conquer/binary_search_recur.cpp +++ b/ru/codes/cpp/chapter_divide_and_conquer/binary_search_recur.cpp @@ -6,7 +6,7 @@ #include "../utils/common.hpp" -/* Бинарный поиск: задача f(i, j) */ +/* Двоичный поиск: задача f(i, j) */ int dfs(vector &nums, int target, int i, int j) { // Если интервал пуст, целевой элемент отсутствует, вернуть -1 if (i > j) { @@ -26,7 +26,7 @@ int dfs(vector &nums, int target, int i, int j) { } } -/* Бинарный поиск */ +/* Двоичный поиск */ int binarySearch(vector &nums, int target) { int n = nums.size(); // Решить задачу f(0, n-1) @@ -38,7 +38,7 @@ int main() { int target = 6; vector nums = {1, 3, 6, 8, 12, 15, 23, 26, 31, 35}; - // Бинарный поиск (двусторонне замкнутый интервал) + // Двоичный поиск (замкнутый интервал) int index = binarySearch(nums, target); cout << "Индекс целевого элемента 6 = " << index << endl; diff --git a/ru/codes/cpp/chapter_searching/binary_search.cpp b/ru/codes/cpp/chapter_searching/binary_search.cpp index c83d28e9f..bced7ca54 100644 --- a/ru/codes/cpp/chapter_searching/binary_search.cpp +++ b/ru/codes/cpp/chapter_searching/binary_search.cpp @@ -6,9 +6,9 @@ #include "../utils/common.hpp" -/* Бинарный поиск (двусторонне замкнутый интервал) */ +/* Двоичный поиск (замкнутый интервал) */ int binarySearch(vector &nums, int target) { - // Инициализировать двусторонне замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно + // Инициализировать замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно int i = 0, j = nums.size() - 1; // Цикл завершается, когда диапазон поиска пуст (при i > j диапазон пуст) while (i <= j) { @@ -24,9 +24,9 @@ int binarySearch(vector &nums, int target) { return -1; } -/* Бинарный поиск (лево замкнутый, право открытый интервал) */ +/* Двоичный поиск (интервал, замкнутый слева и открытый справа) */ int binarySearchLCRO(vector &nums, int target) { - // Инициализировать лево замкнутый, право открытый интервал [0, n), то есть i и j указывают на первый элемент массива и позицию сразу за последним элементом соответственно + // Инициализация интервала [0, n), замкнутого слева и открытого справа: i указывает на первый элемент массива, а j — на позицию сразу за последним int i = 0, j = nums.size(); // Цикл завершается, когда диапазон поиска пуст (при i = j диапазон пуст) while (i < j) { @@ -47,11 +47,11 @@ int main() { int target = 6; vector nums = {1, 3, 6, 8, 12, 15, 23, 26, 31, 35}; - /* Бинарный поиск (двусторонне замкнутый интервал) */ + /* Двоичный поиск (замкнутый интервал) */ int index = binarySearch(nums, target); cout << "Индекс целевого элемента 6 = " << index << endl; - /* Бинарный поиск (лево замкнутый, право открытый интервал) */ + /* Двоичный поиск (интервал, замкнутый слева и открытый справа) */ index = binarySearchLCRO(nums, target); cout << "Индекс целевого элемента 6 = " << index << endl; diff --git a/ru/codes/cpp/chapter_searching/binary_search_edge.cpp b/ru/codes/cpp/chapter_searching/binary_search_edge.cpp index aa6b6f486..71c25ef44 100644 --- a/ru/codes/cpp/chapter_searching/binary_search_edge.cpp +++ b/ru/codes/cpp/chapter_searching/binary_search_edge.cpp @@ -6,9 +6,9 @@ #include "../utils/common.hpp" -/* Бинарный поиск точки вставки (с повторяющимися элементами) */ +/* Двоичный поиск точки вставки (с повторяющимися элементами) */ int binarySearchInsertion(const vector &nums, int target) { - int i = 0, j = nums.size() - 1; // Инициализировать двусторонне замкнутый интервал [0, n-1] + int i = 0, j = nums.size() - 1; // Инициализировать замкнутый интервал [0, n-1] while (i <= j) { int m = i + (j - i) / 2; // Вычислить индекс середины m if (nums[m] < target) { @@ -21,7 +21,7 @@ int binarySearchInsertion(const vector &nums, int target) { return i; } -/* Бинарный поиск самого левого target */ +/* Двоичный поиск самого левого элемента target */ int binarySearchLeftEdge(vector &nums, int target) { // Эквивалентно поиску точки вставки target int i = binarySearchInsertion(nums, target); @@ -29,11 +29,11 @@ int binarySearchLeftEdge(vector &nums, int target) { if (i == nums.size() || nums[i] != target) { return -1; } - // Найти target и вернуть индекс i + // target найден, возвращается индекс i return i; } -/* Бинарный поиск самого правого target */ +/* Двоичный поиск самого правого элемента target */ int binarySearchRightEdge(vector &nums, int target) { // Преобразовать задачу в поиск самого левого target + 1 int i = binarySearchInsertion(nums, target + 1); @@ -43,7 +43,7 @@ int binarySearchRightEdge(vector &nums, int target) { if (j == -1 || nums[j] != target) { return -1; } - // Найти target и вернуть индекс j + // target найден, возвращается индекс j return j; } @@ -54,7 +54,7 @@ int main() { cout << "\nМассив nums = "; printVector(nums); - // Бинарный поиск левой и правой границы + // Двоичный поиск левой и правой границы for (int target : {6, 7}) { int index = binarySearchLeftEdge(nums, target); cout << "Индекс самого левого элемента " << target << " равен " << index << endl; diff --git a/ru/codes/cpp/chapter_searching/binary_search_insertion.cpp b/ru/codes/cpp/chapter_searching/binary_search_insertion.cpp index 822521962..9b6485707 100644 --- a/ru/codes/cpp/chapter_searching/binary_search_insertion.cpp +++ b/ru/codes/cpp/chapter_searching/binary_search_insertion.cpp @@ -6,9 +6,9 @@ #include "../utils/common.hpp" -/* Бинарный поиск точки вставки (без повторяющихся элементов) */ +/* Двоичный поиск точки вставки (без повторяющихся элементов) */ int binarySearchInsertionSimple(vector &nums, int target) { - int i = 0, j = nums.size() - 1; // Инициализировать двусторонне замкнутый интервал [0, n-1] + int i = 0, j = nums.size() - 1; // Инициализировать замкнутый интервал [0, n-1] while (i <= j) { int m = i + (j - i) / 2; // Вычислить индекс середины m if (nums[m] < target) { @@ -16,16 +16,16 @@ int binarySearchInsertionSimple(vector &nums, int target) { } else if (nums[m] > target) { j = m - 1; // target находится в интервале [i, m-1] } else { - return m; // Найти target и вернуть точку вставки m + return m; // target найден, возвращается точка вставки m } } // target не найден, вернуть точку вставки i return i; } -/* Бинарный поиск точки вставки (с повторяющимися элементами) */ +/* Двоичный поиск точки вставки (с повторяющимися элементами) */ int binarySearchInsertion(vector &nums, int target) { - int i = 0, j = nums.size() - 1; // Инициализировать двусторонне замкнутый интервал [0, n-1] + int i = 0, j = nums.size() - 1; // Инициализировать замкнутый интервал [0, n-1] while (i <= j) { int m = i + (j - i) / 2; // Вычислить индекс середины m if (nums[m] < target) { @@ -46,7 +46,7 @@ int main() { vector nums = {1, 3, 6, 8, 12, 15, 23, 26, 31, 35}; cout << "\nМассив nums = "; printVector(nums); - // Бинарный поиск точки вставки + // Двоичный поиск точки вставки for (int target : {6, 9}) { int index = binarySearchInsertionSimple(nums, target); cout << "Индекс позиции вставки элемента " << target << " равен " << index << endl; @@ -56,7 +56,7 @@ int main() { nums = {1, 3, 6, 6, 6, 6, 6, 10, 12, 15}; cout << "\nМассив nums = "; printVector(nums); - // Бинарный поиск точки вставки + // Двоичный поиск точки вставки for (int target : {2, 6, 20}) { int index = binarySearchInsertion(nums, target); cout << "Индекс позиции вставки элемента " << target << " равен " << index << endl; diff --git a/ru/codes/cpp/chapter_searching/linear_search.cpp b/ru/codes/cpp/chapter_searching/linear_search.cpp index 31f2514b1..96fe8e8a3 100644 --- a/ru/codes/cpp/chapter_searching/linear_search.cpp +++ b/ru/codes/cpp/chapter_searching/linear_search.cpp @@ -22,7 +22,7 @@ int linearSearchArray(vector &nums, int target) { ListNode *linearSearchLinkedList(ListNode *head, int target) { // Обойти связный список while (head != nullptr) { - // Найти целевой узел и вернуть его + // Целевой узел найден, возвращается этот узел if (head->val == target) return head; head = head->next; diff --git a/ru/codes/cpp/chapter_stack_and_queue/linkedlist_deque.cpp b/ru/codes/cpp/chapter_stack_and_queue/linkedlist_deque.cpp index a7478d828..f2a40bbd6 100644 --- a/ru/codes/cpp/chapter_stack_and_queue/linkedlist_deque.cpp +++ b/ru/codes/cpp/chapter_stack_and_queue/linkedlist_deque.cpp @@ -87,7 +87,7 @@ class LinkedListDeque { // Если в очереди один элемент, начало и конец указывают на один узел if (queSize == 1) { val = front->val; - delete front; // Освобождаем общий узел один раз + delete front; // Оба указателя указывают на один узел, поэтому достаточно освободить его один раз front = nullptr; rear = nullptr; } diff --git a/ru/codes/csharp/chapter_array_and_linkedlist/array.cs b/ru/codes/csharp/chapter_array_and_linkedlist/array.cs index 1cc5b9b13..84804cf00 100644 --- a/ru/codes/csharp/chapter_array_and_linkedlist/array.cs +++ b/ru/codes/csharp/chapter_array_and_linkedlist/array.cs @@ -8,14 +8,14 @@ public class array { /* Случайный доступ к элементу */ int RandomAccess(int[] nums) { Random random = new(); - // Случайным образом выбрать число из интервала [0, nums.Length) + // Случайный выбор числа из диапазона [0, nums.Length) int randomIndex = random.Next(nums.Length); // Получить и вернуть случайный элемент int randomNum = nums[randomIndex]; return randomNum; } - /* Увеличить длину массива */ + /* Увеличение длины массива */ int[] Extend(int[] nums, int enlarge) { // Инициализировать массив увеличенной длины int[] res = new int[nums.Length + enlarge]; @@ -27,9 +27,9 @@ public class array { return res; } - /* Вставить элемент num по индексу index в массив */ + /* Вставка элемента num в массив по индексу index */ void Insert(int[] nums, int num, int index) { - // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию вправо for (int i = nums.Length - 1; i > index; i--) { nums[i] = nums[i - 1]; } @@ -37,9 +37,9 @@ public class array { nums[index] = num; } - /* Удалить элемент по индексу index */ + /* Удаление элемента по индексу index */ void Remove(int[] nums, int index) { - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for (int i = index; i < nums.Length - 1; i++) { nums[i] = nums[i + 1]; } @@ -58,7 +58,7 @@ public class array { } } - /* Найти заданный элемент в массиве */ + /* Поиск заданного элемента в массиве */ int Find(int[] nums, int target) { for (int i = 0; i < nums.Length; i++) { if (nums[i] == target) diff --git a/ru/codes/csharp/chapter_array_and_linkedlist/linked_list.cs b/ru/codes/csharp/chapter_array_and_linkedlist/linked_list.cs index 68b82d445..e73f03382 100644 --- a/ru/codes/csharp/chapter_array_and_linkedlist/linked_list.cs +++ b/ru/codes/csharp/chapter_array_and_linkedlist/linked_list.cs @@ -5,14 +5,14 @@ namespace hello_algo.chapter_array_and_linkedlist; public class linked_list { - /* Вставить узел P после узла n0 в связном списке */ + /* Вставка узла P в связный список после узла n0 */ void Insert(ListNode n0, ListNode P) { ListNode? n1 = n0.next; P.next = n1; n0.next = P; } - /* Удалить первый узел после узла n0 в связном списке */ + /* Удаление первого узла после узла n0 из связного списка */ void Remove(ListNode n0) { if (n0.next == null) return; @@ -22,7 +22,7 @@ public class linked_list { n0.next = n1; } - /* Доступ к узлу связного списка по индексу index */ + /* Доступ к узлу с индексом index в связном списке */ ListNode? Access(ListNode? head, int index) { for (int i = 0; i < index; i++) { if (head == null) @@ -32,7 +32,7 @@ public class linked_list { return head; } - /* Найти в связном списке первый узел со значением target */ + /* Поиск первого узла со значением target в связном списке */ int Find(ListNode? head, int target) { int index = 0; while (head != null) { diff --git a/ru/codes/csharp/chapter_array_and_linkedlist/list.cs b/ru/codes/csharp/chapter_array_and_linkedlist/list.cs index bea624e5e..73da5b0dc 100644 --- a/ru/codes/csharp/chapter_array_and_linkedlist/list.cs +++ b/ru/codes/csharp/chapter_array_and_linkedlist/list.cs @@ -19,9 +19,9 @@ public class list { int num = nums[1]; Console.WriteLine("Элемент по индексу 1: num = " + num); - /* Обновление элемента */ + /* Изменение элемента */ nums[1] = 0; - Console.WriteLine("После обновления элемента по индексу 1 до 0 nums = " + string.Join(",", nums)); + Console.WriteLine("После изменения значения элемента с индексом 1 на 0 nums = " + string.Join(",", nums)); /* Очистить список */ nums.Clear(); diff --git a/ru/codes/csharp/chapter_array_and_linkedlist/my_list.cs b/ru/codes/csharp/chapter_array_and_linkedlist/my_list.cs index a47098526..39d5b8824 100644 --- a/ru/codes/csharp/chapter_array_and_linkedlist/my_list.cs +++ b/ru/codes/csharp/chapter_array_and_linkedlist/my_list.cs @@ -36,7 +36,7 @@ class MyList { return arr[index]; } - /* Обновление элемента */ + /* Изменение элемента */ public void Set(int index, int num) { if (index < 0 || index >= arrSize) throw new IndexOutOfRangeException("индекс выходит за границы"); @@ -60,7 +60,7 @@ class MyList { // При превышении вместимости по числу элементов запускается расширение if (arrSize == arrCapacity) ExtendCapacity(); - // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию вправо for (int j = arrSize - 1; j >= index; j--) { arr[j + 1] = arr[j]; } @@ -74,7 +74,7 @@ class MyList { if (index < 0 || index >= arrSize) throw new IndexOutOfRangeException("индекс выходит за границы"); int num = arr[index]; - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for (int j = index; j < arrSize - 1; j++) { arr[j] = arr[j + 1]; } @@ -129,9 +129,9 @@ public class my_list { int num = nums.Get(1); Console.WriteLine("Элемент по индексу 1: num = " + num); - /* Обновление элемента */ + /* Изменение элемента */ nums.Set(1, 0); - Console.WriteLine("После обновления элемента по индексу 1 до 0 nums = " + string.Join(",", nums.ToArray())); + Console.WriteLine("После изменения значения элемента с индексом 1 на 0 nums = " + string.Join(",", nums.ToArray())); /* Проверка механизма расширения */ for (int i = 0; i < 10; i++) { diff --git a/ru/codes/csharp/chapter_divide_and_conquer/binary_search_recur.cs b/ru/codes/csharp/chapter_divide_and_conquer/binary_search_recur.cs index 0227e8587..cbf19f954 100644 --- a/ru/codes/csharp/chapter_divide_and_conquer/binary_search_recur.cs +++ b/ru/codes/csharp/chapter_divide_and_conquer/binary_search_recur.cs @@ -7,7 +7,7 @@ namespace hello_algo.chapter_divide_and_conquer; public class binary_search_recur { - /* Бинарный поиск: задача f(i, j) */ + /* Двоичный поиск: задача f(i, j) */ int DFS(int[] nums, int target, int i, int j) { // Если интервал пуст, целевой элемент отсутствует, вернуть -1 if (i > j) { @@ -27,7 +27,7 @@ public class binary_search_recur { } } - /* Бинарный поиск */ + /* Двоичный поиск */ int BinarySearch(int[] nums, int target) { int n = nums.Length; // Решить задачу f(0, n-1) @@ -39,7 +39,7 @@ public class binary_search_recur { int target = 6; int[] nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]; - // Бинарный поиск (двусторонне замкнутый интервал) + // Двоичный поиск (замкнутый интервал) int index = BinarySearch(nums, target); Console.WriteLine("Индекс целевого элемента 6 = " + index); } diff --git a/ru/codes/csharp/chapter_searching/binary_search.cs b/ru/codes/csharp/chapter_searching/binary_search.cs index 3cc98a657..fa622b4b8 100644 --- a/ru/codes/csharp/chapter_searching/binary_search.cs +++ b/ru/codes/csharp/chapter_searching/binary_search.cs @@ -7,9 +7,9 @@ namespace hello_algo.chapter_searching; public class binary_search { - /* Бинарный поиск (двусторонне замкнутый интервал) */ + /* Двоичный поиск (замкнутый интервал) */ int BinarySearch(int[] nums, int target) { - // Инициализировать двусторонне замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно + // Инициализировать замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно int i = 0, j = nums.Length - 1; // Цикл завершается, когда диапазон поиска пуст (при i > j диапазон пуст) while (i <= j) { @@ -25,9 +25,9 @@ public class binary_search { return -1; } - /* Бинарный поиск (лево замкнутый, право открытый интервал) */ + /* Двоичный поиск (интервал, замкнутый слева и открытый справа) */ int BinarySearchLCRO(int[] nums, int target) { - // Инициализировать лево замкнутый, право открытый интервал [0, n), то есть i и j указывают на первый элемент массива и позицию сразу за последним элементом соответственно + // Инициализация интервала [0, n), замкнутого слева и открытого справа: i указывает на первый элемент массива, а j — на позицию сразу за последним int i = 0, j = nums.Length; // Цикл завершается, когда диапазон поиска пуст (при i = j диапазон пуст) while (i < j) { @@ -48,11 +48,11 @@ public class binary_search { int target = 6; int[] nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]; - /* Бинарный поиск (двусторонне замкнутый интервал) */ + /* Двоичный поиск (замкнутый интервал) */ int index = BinarySearch(nums, target); Console.WriteLine("Индекс целевого элемента 6 = " + index); - /* Бинарный поиск (лево замкнутый, право открытый интервал) */ + /* Двоичный поиск (интервал, замкнутый слева и открытый справа) */ index = BinarySearchLCRO(nums, target); Console.WriteLine("Индекс целевого элемента 6 = " + index); } diff --git a/ru/codes/csharp/chapter_searching/binary_search_edge.cs b/ru/codes/csharp/chapter_searching/binary_search_edge.cs index c6cbc288e..6680c61f8 100644 --- a/ru/codes/csharp/chapter_searching/binary_search_edge.cs +++ b/ru/codes/csharp/chapter_searching/binary_search_edge.cs @@ -7,7 +7,7 @@ namespace hello_algo.chapter_searching; public class binary_search_edge { - /* Бинарный поиск самого левого target */ + /* Двоичный поиск самого левого элемента target */ int BinarySearchLeftEdge(int[] nums, int target) { // Эквивалентно поиску точки вставки target int i = binary_search_insertion.BinarySearchInsertion(nums, target); @@ -15,11 +15,11 @@ public class binary_search_edge { if (i == nums.Length || nums[i] != target) { return -1; } - // Найти target и вернуть индекс i + // target найден, возвращается индекс i return i; } - /* Бинарный поиск самого правого target */ + /* Двоичный поиск самого правого элемента target */ int BinarySearchRightEdge(int[] nums, int target) { // Преобразовать задачу в поиск самого левого target + 1 int i = binary_search_insertion.BinarySearchInsertion(nums, target + 1); @@ -29,7 +29,7 @@ public class binary_search_edge { if (j == -1 || nums[j] != target) { return -1; } - // Найти target и вернуть индекс j + // target найден, возвращается индекс j return j; } @@ -39,7 +39,7 @@ public class binary_search_edge { int[] nums = [1, 3, 6, 6, 6, 6, 6, 10, 12, 15]; Console.WriteLine("\nМассив nums = " + nums.PrintList()); - // Бинарный поиск левой и правой границы + // Двоичный поиск левой и правой границы foreach (int target in new int[] { 6, 7 }) { int index = BinarySearchLeftEdge(nums, target); Console.WriteLine("Индекс самого левого элемента " + target + " равен " + index); diff --git a/ru/codes/csharp/chapter_searching/binary_search_insertion.cs b/ru/codes/csharp/chapter_searching/binary_search_insertion.cs index 4f6f0bd3b..ed405ba96 100644 --- a/ru/codes/csharp/chapter_searching/binary_search_insertion.cs +++ b/ru/codes/csharp/chapter_searching/binary_search_insertion.cs @@ -7,9 +7,9 @@ namespace hello_algo.chapter_searching; public class binary_search_insertion { - /* Бинарный поиск точки вставки (без повторяющихся элементов) */ + /* Двоичный поиск точки вставки (без повторяющихся элементов) */ public static int BinarySearchInsertionSimple(int[] nums, int target) { - int i = 0, j = nums.Length - 1; // Инициализировать двусторонне замкнутый интервал [0, n-1] + int i = 0, j = nums.Length - 1; // Инициализировать замкнутый интервал [0, n-1] while (i <= j) { int m = i + (j - i) / 2; // Вычислить индекс середины m if (nums[m] < target) { @@ -17,16 +17,16 @@ public class binary_search_insertion { } else if (nums[m] > target) { j = m - 1; // target находится в интервале [i, m-1] } else { - return m; // Найти target и вернуть точку вставки m + return m; // target найден, возвращается точка вставки m } } // target не найден, вернуть точку вставки i return i; } - /* Бинарный поиск точки вставки (с повторяющимися элементами) */ + /* Двоичный поиск точки вставки (с повторяющимися элементами) */ public static int BinarySearchInsertion(int[] nums, int target) { - int i = 0, j = nums.Length - 1; // Инициализировать двусторонне замкнутый интервал [0, n-1] + int i = 0, j = nums.Length - 1; // Инициализировать замкнутый интервал [0, n-1] while (i <= j) { int m = i + (j - i) / 2; // Вычислить индекс середины m if (nums[m] < target) { @@ -46,7 +46,7 @@ public class binary_search_insertion { // Массив без повторяющихся элементов int[] nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]; Console.WriteLine("\nМассив nums = " + nums.PrintList()); - // Бинарный поиск точки вставки + // Двоичный поиск точки вставки foreach (int target in new int[] { 6, 9 }) { int index = BinarySearchInsertionSimple(nums, target); Console.WriteLine("Индекс позиции вставки элемента " + target + " равен " + index); @@ -55,7 +55,7 @@ public class binary_search_insertion { // Массив с повторяющимися элементами nums = [1, 3, 6, 6, 6, 6, 6, 10, 12, 15]; Console.WriteLine("\nМассив nums = " + nums.PrintList()); - // Бинарный поиск точки вставки + // Двоичный поиск точки вставки foreach (int target in new int[] { 2, 6, 20 }) { int index = BinarySearchInsertion(nums, target); Console.WriteLine("Индекс позиции вставки элемента " + target + " равен " + index); diff --git a/ru/codes/csharp/chapter_searching/linear_search.cs b/ru/codes/csharp/chapter_searching/linear_search.cs index 51bba2d9f..d904b57e5 100644 --- a/ru/codes/csharp/chapter_searching/linear_search.cs +++ b/ru/codes/csharp/chapter_searching/linear_search.cs @@ -23,7 +23,7 @@ public class linear_search { ListNode? LinearSearchLinkedList(ListNode? head, int target) { // Обойти связный список while (head != null) { - // Найти целевой узел и вернуть его + // Целевой узел найден, возвращается этот узел if (head.val == target) return head; head = head.next; diff --git a/ru/codes/dart/chapter_array_and_linkedlist/array.dart b/ru/codes/dart/chapter_array_and_linkedlist/array.dart index e6108f9fe..ca32b9892 100644 --- a/ru/codes/dart/chapter_array_and_linkedlist/array.dart +++ b/ru/codes/dart/chapter_array_and_linkedlist/array.dart @@ -10,14 +10,14 @@ import 'dart:math'; /* Случайный доступ к элементу */ int randomAccess(List nums) { - // Случайным образом выбрать число из интервала [0, nums.length) + // Случайный выбор числа из диапазона [0, nums.length) int randomIndex = Random().nextInt(nums.length); // Получить и вернуть случайный элемент int randomNum = nums[randomIndex]; return randomNum; } -/* Увеличить длину массива */ +/* Увеличение длины массива */ List extend(List nums, int enlarge) { // Инициализировать массив увеличенной длины List res = List.filled(nums.length + enlarge, 0); @@ -29,9 +29,9 @@ List extend(List nums, int enlarge) { return res; } -/* Вставить элемент _num по индексу index в массив */ +/* Вставка элемента _num в массив по индексу index */ void insert(List nums, int _num, int index) { - // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию вправо for (var i = nums.length - 1; i > index; i--) { nums[i] = nums[i - 1]; } @@ -39,9 +39,9 @@ void insert(List nums, int _num, int index) { nums[index] = _num; } -/* Удалить элемент по индексу index */ +/* Удаление элемента по индексу index */ void remove(List nums, int index) { - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for (var i = index; i < nums.length - 1; i++) { nums[i] = nums[i + 1]; } @@ -64,7 +64,7 @@ void traverse(List nums) { }); } -/* Найти заданный элемент в массиве */ +/* Поиск заданного элемента в массиве */ int find(List nums, int target) { for (var i = 0; i < nums.length; i++) { if (nums[i] == target) return i; diff --git a/ru/codes/dart/chapter_array_and_linkedlist/linked_list.dart b/ru/codes/dart/chapter_array_and_linkedlist/linked_list.dart index 6763176f7..888e56d88 100644 --- a/ru/codes/dart/chapter_array_and_linkedlist/linked_list.dart +++ b/ru/codes/dart/chapter_array_and_linkedlist/linked_list.dart @@ -7,14 +7,14 @@ import '../utils/list_node.dart'; import '../utils/print_util.dart'; -/* Вставить узел P после узла n0 в связном списке */ +/* Вставка узла P в связный список после узла n0 */ void insert(ListNode n0, ListNode P) { ListNode? n1 = n0.next; P.next = n1; n0.next = P; } -/* Удалить первый узел после узла n0 в связном списке */ +/* Удаление первого узла после узла n0 из связного списка */ void remove(ListNode n0) { if (n0.next == null) return; // n0 -> P -> n1 @@ -23,7 +23,7 @@ void remove(ListNode n0) { n0.next = n1; } -/* Доступ к узлу связного списка по индексу index */ +/* Доступ к узлу с индексом index в связном списке */ ListNode? access(ListNode? head, int index) { for (var i = 0; i < index; i++) { if (head == null) return null; @@ -32,7 +32,7 @@ ListNode? access(ListNode? head, int index) { return head; } -/* Найти в связном списке первый узел со значением target */ +/* Поиск первого узла со значением target в связном списке */ int find(ListNode? head, int target) { int index = 0; while (head != null) { diff --git a/ru/codes/dart/chapter_array_and_linkedlist/list.dart b/ru/codes/dart/chapter_array_and_linkedlist/list.dart index e376b8684..45dcabbea 100644 --- a/ru/codes/dart/chapter_array_and_linkedlist/list.dart +++ b/ru/codes/dart/chapter_array_and_linkedlist/list.dart @@ -16,9 +16,9 @@ void main() { int _num = nums[1]; print('Элемент по индексу 1: _num = $_num'); - /* Обновление элемента */ + /* Изменение элемента */ nums[1] = 0; - print('После обновления элемента по индексу 1 до 0 nums = $nums'); + print('После изменения значения элемента с индексом 1 на 0 nums = $nums'); /* Очистить список */ nums.clear(); diff --git a/ru/codes/dart/chapter_array_and_linkedlist/my_list.dart b/ru/codes/dart/chapter_array_and_linkedlist/my_list.dart index 27f1e9b8d..8730fb114 100644 --- a/ru/codes/dart/chapter_array_and_linkedlist/my_list.dart +++ b/ru/codes/dart/chapter_array_and_linkedlist/my_list.dart @@ -28,7 +28,7 @@ class MyList { return _arr[index]; } - /* Обновление элемента */ + /* Изменение элемента */ void set(int index, int _num) { if (index >= _size) throw RangeError('индекс выходит за границы'); _arr[index] = _num; @@ -48,7 +48,7 @@ class MyList { if (index >= _size) throw RangeError('индекс выходит за границы'); // При превышении вместимости по числу элементов запускается расширение if (_size == _capacity) extendCapacity(); - // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию вправо for (var j = _size - 1; j >= index; j--) { _arr[j + 1] = _arr[j]; } @@ -61,7 +61,7 @@ class MyList { int remove(int index) { if (index >= _size) throw RangeError('индекс выходит за границы'); int _num = _arr[index]; - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for (var j = index; j < _size - 1; j++) { _arr[j] = _arr[j + 1]; } @@ -118,9 +118,9 @@ void main() { int _num = nums.get(1); print('Элемент по индексу 1: _num = $_num'); - /* Обновление элемента */ + /* Изменение элемента */ nums.set(1, 0); - print('После обновления элемента по индексу 1 до 0 nums = ${nums.toArray()}'); + print('После изменения значения элемента с индексом 1 на 0 nums = ${nums.toArray()}'); /* Проверка механизма расширения */ for (var i = 0; i < 10; i++) { diff --git a/ru/codes/dart/chapter_divide_and_conquer/binary_search_recur.dart b/ru/codes/dart/chapter_divide_and_conquer/binary_search_recur.dart index a927c7be4..030dca76e 100644 --- a/ru/codes/dart/chapter_divide_and_conquer/binary_search_recur.dart +++ b/ru/codes/dart/chapter_divide_and_conquer/binary_search_recur.dart @@ -4,7 +4,7 @@ * Author: liuyuxin (gvenusleo@gmail.com) */ -/* Бинарный поиск: задача f(i, j) */ +/* Двоичный поиск: задача f(i, j) */ int dfs(List nums, int target, int i, int j) { // Если интервал пуст, целевой элемент отсутствует, вернуть -1 if (i > j) { @@ -24,7 +24,7 @@ int dfs(List nums, int target, int i, int j) { } } -/* Бинарный поиск */ +/* Двоичный поиск */ int binarySearch(List nums, int target) { int n = nums.length; // Решить задачу f(0, n-1) @@ -36,7 +36,7 @@ void main() { int target = 6; List nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]; - // Бинарный поиск (двусторонне замкнутый интервал) + // Двоичный поиск (замкнутый интервал) int index = binarySearch(nums, target); print("Индекс целевого элемента 6 = $index"); } diff --git a/ru/codes/dart/chapter_searching/binary_search.dart b/ru/codes/dart/chapter_searching/binary_search.dart index 0d40b91a2..99c6e4427 100644 --- a/ru/codes/dart/chapter_searching/binary_search.dart +++ b/ru/codes/dart/chapter_searching/binary_search.dart @@ -4,9 +4,9 @@ * Author: Jefferson (JeffersonHuang77@gmail.com) */ -/* Бинарный поиск (двусторонне замкнутый интервал) */ +/* Двоичный поиск (замкнутый интервал) */ int binarySearch(List nums, int target) { - // Инициализировать двусторонне замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно + // Инициализировать замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно int i = 0, j = nums.length - 1; // Цикл завершается, когда диапазон поиска пуст (при i > j диапазон пуст) while (i <= j) { @@ -26,9 +26,9 @@ int binarySearch(List nums, int target) { return -1; } -/* Бинарный поиск (лево замкнутый, право открытый интервал) */ +/* Двоичный поиск (интервал, замкнутый слева и открытый справа) */ int binarySearchLCRO(List nums, int target) { - // Инициализировать лево замкнутый, право открытый интервал [0, n), то есть i и j указывают на первый элемент массива и позицию сразу за последним элементом соответственно + // Инициализация интервала [0, n), замкнутого слева и открытого справа: i указывает на первый элемент массива, а j — на позицию сразу за последним int i = 0, j = nums.length; // Цикл завершается, когда диапазон поиска пуст (при i = j диапазон пуст) while (i < j) { @@ -53,11 +53,11 @@ void main() { int target = 6; final nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]; - /* Бинарный поиск (двусторонне замкнутый интервал) */ + /* Двоичный поиск (замкнутый интервал) */ int index = binarySearch(nums, target); print('Индекс целевого элемента 6 = $index'); - /* Бинарный поиск (лево замкнутый, право открытый интервал) */ + /* Двоичный поиск (интервал, замкнутый слева и открытый справа) */ index = binarySearchLCRO(nums, target); print('Индекс целевого элемента 6 = $index'); } diff --git a/ru/codes/dart/chapter_searching/binary_search_edge.dart b/ru/codes/dart/chapter_searching/binary_search_edge.dart index 403b1367d..126cde135 100644 --- a/ru/codes/dart/chapter_searching/binary_search_edge.dart +++ b/ru/codes/dart/chapter_searching/binary_search_edge.dart @@ -6,7 +6,7 @@ import 'binary_search_insertion.dart'; -/* Бинарный поиск самого левого target */ +/* Двоичный поиск самого левого элемента target */ int binarySearchLeftEdge(List nums, int target) { // Эквивалентно поиску точки вставки target int i = binarySearchInsertion(nums, target); @@ -14,11 +14,11 @@ int binarySearchLeftEdge(List nums, int target) { if (i == nums.length || nums[i] != target) { return -1; } - // Найти target и вернуть индекс i + // target найден, возвращается индекс i return i; } -/* Бинарный поиск самого правого target */ +/* Двоичный поиск самого правого элемента target */ int binarySearchRightEdge(List nums, int target) { // Преобразовать задачу в поиск самого левого target + 1 int i = binarySearchInsertion(nums, target + 1); @@ -28,7 +28,7 @@ int binarySearchRightEdge(List nums, int target) { if (j == -1 || nums[j] != target) { return -1; } - // Найти target и вернуть индекс j + // target найден, возвращается индекс j return j; } @@ -38,7 +38,7 @@ void main() { List nums = [1, 3, 6, 6, 6, 6, 6, 10, 12, 15]; print("\nМассив nums = $nums"); - // Бинарный поиск левой и правой границы + // Двоичный поиск левой и правой границы for (int target in [6, 7]) { int index = binarySearchLeftEdge(nums, target); print("Индекс самого левого элемента $target равен $index"); diff --git a/ru/codes/dart/chapter_searching/binary_search_insertion.dart b/ru/codes/dart/chapter_searching/binary_search_insertion.dart index 936cfd6f9..2b7ba7b85 100644 --- a/ru/codes/dart/chapter_searching/binary_search_insertion.dart +++ b/ru/codes/dart/chapter_searching/binary_search_insertion.dart @@ -4,9 +4,9 @@ * Author: liuyuxin (gvenusleo@gmail.com) */ -/* Бинарный поиск точки вставки (без повторяющихся элементов) */ +/* Двоичный поиск точки вставки (без повторяющихся элементов) */ int binarySearchInsertionSimple(List nums, int target) { - int i = 0, j = nums.length - 1; // Инициализировать двусторонне замкнутый интервал [0, n-1] + int i = 0, j = nums.length - 1; // Инициализировать замкнутый интервал [0, n-1] while (i <= j) { int m = i + (j - i) ~/ 2; // Вычислить индекс середины m if (nums[m] < target) { @@ -14,16 +14,16 @@ int binarySearchInsertionSimple(List nums, int target) { } else if (nums[m] > target) { j = m - 1; // target находится в интервале [i, m-1] } else { - return m; // Найти target и вернуть точку вставки m + return m; // target найден, возвращается точка вставки m } } // target не найден, вернуть точку вставки i return i; } -/* Бинарный поиск точки вставки (с повторяющимися элементами) */ +/* Двоичный поиск точки вставки (с повторяющимися элементами) */ int binarySearchInsertion(List nums, int target) { - int i = 0, j = nums.length - 1; // Инициализировать двусторонне замкнутый интервал [0, n-1] + int i = 0, j = nums.length - 1; // Инициализировать замкнутый интервал [0, n-1] while (i <= j) { int m = i + (j - i) ~/ 2; // Вычислить индекс середины m if (nums[m] < target) { @@ -43,7 +43,7 @@ void main() { // Массив без повторяющихся элементов List nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]; print("\nМассив nums = $nums"); - // Бинарный поиск точки вставки + // Двоичный поиск точки вставки for (int target in [6, 9]) { int index = binarySearchInsertionSimple(nums, target); print("Индекс позиции вставки элемента $target равен $index"); @@ -52,7 +52,7 @@ void main() { // Массив с повторяющимися элементами nums = [1, 3, 6, 6, 6, 6, 6, 10, 12, 15]; print("\nМассив nums = $nums"); - // Бинарный поиск точки вставки + // Двоичный поиск точки вставки for (int target in [2, 6, 20]) { int index = binarySearchInsertion(nums, target); print("Индекс позиции вставки элемента $target равен $index"); diff --git a/ru/codes/dart/chapter_searching/linear_search.dart b/ru/codes/dart/chapter_searching/linear_search.dart index 72bd1b13f..6d11d933c 100644 --- a/ru/codes/dart/chapter_searching/linear_search.dart +++ b/ru/codes/dart/chapter_searching/linear_search.dart @@ -23,7 +23,7 @@ int linearSearchArray(List nums, int target) { ListNode? linearSearchList(ListNode? head, int target) { // Обойти связный список while (head != null) { - // Найти целевой узел и вернуть его + // Целевой узел найден, возвращается этот узел if (head.val == target) return head; head = head.next; } diff --git a/ru/codes/go/chapter_array_and_linkedlist/array.go b/ru/codes/go/chapter_array_and_linkedlist/array.go index 07fbb2b3d..774266bb7 100644 --- a/ru/codes/go/chapter_array_and_linkedlist/array.go +++ b/ru/codes/go/chapter_array_and_linkedlist/array.go @@ -10,14 +10,14 @@ import ( /* Случайный доступ к элементу */ func randomAccess(nums []int) (randomNum int) { - // Случайным образом выбрать число из интервала [0, nums.length) + // Случайный выбор числа из диапазона [0, nums.length) randomIndex := rand.Intn(len(nums)) // Получить и вернуть случайный элемент randomNum = nums[randomIndex] return } -/* Увеличить длину массива */ +/* Увеличение длины массива */ func extend(nums []int, enlarge int) []int { // Инициализировать массив увеличенной длины res := make([]int, len(nums)+enlarge) @@ -29,9 +29,9 @@ func extend(nums []int, enlarge int) []int { return res } -/* Вставить элемент num по индексу index в массив */ +/* Вставка элемента num в массив по индексу index */ func insert(nums []int, num int, index int) { - // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию вправо for i := len(nums) - 1; i > index; i-- { nums[i] = nums[i-1] } @@ -39,9 +39,9 @@ func insert(nums []int, num int, index int) { nums[index] = num } -/* Удалить элемент по индексу index */ +/* Удаление элемента по индексу index */ func remove(nums []int, index int) { - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for i := index; i < len(nums)-1; i++ { nums[i] = nums[i+1] } @@ -66,7 +66,7 @@ func traverse(nums []int) { } } -/* Найти заданный элемент в массиве */ +/* Поиск заданного элемента в массиве */ func find(nums []int, target int) (index int) { index = -1 for i := 0; i < len(nums); i++ { diff --git a/ru/codes/go/chapter_array_and_linkedlist/linked_list.go b/ru/codes/go/chapter_array_and_linkedlist/linked_list.go index e0d8e54cc..244bda714 100644 --- a/ru/codes/go/chapter_array_and_linkedlist/linked_list.go +++ b/ru/codes/go/chapter_array_and_linkedlist/linked_list.go @@ -8,14 +8,14 @@ import ( . "github.com/krahets/hello-algo/pkg" ) -/* Вставить узел P после узла n0 в связном списке */ +/* Вставка узла P в связный список после узла n0 */ func insertNode(n0 *ListNode, P *ListNode) { n1 := n0.Next P.Next = n1 n0.Next = P } -/* Удалить первый узел после узла n0 в связном списке */ +/* Удаление первого узла после узла n0 из связного списка */ func removeItem(n0 *ListNode) { if n0.Next == nil { return @@ -26,7 +26,7 @@ func removeItem(n0 *ListNode) { n0.Next = n1 } -/* Доступ к узлу связного списка по индексу index */ +/* Доступ к узлу с индексом index в связном списке */ func access(head *ListNode, index int) *ListNode { for i := 0; i < index; i++ { if head == nil { @@ -37,7 +37,7 @@ func access(head *ListNode, index int) *ListNode { return head } -/* Найти в связном списке первый узел со значением target */ +/* Поиск первого узла со значением target в связном списке */ func findNode(head *ListNode, target int) int { index := 0 for head != nil { diff --git a/ru/codes/go/chapter_array_and_linkedlist/list_test.go b/ru/codes/go/chapter_array_and_linkedlist/list_test.go index 1b6ccff91..0d1a068bc 100644 --- a/ru/codes/go/chapter_array_and_linkedlist/list_test.go +++ b/ru/codes/go/chapter_array_and_linkedlist/list_test.go @@ -20,9 +20,9 @@ func TestList(t *testing.T) { num := nums[1] // Обратиться к элементу по индексу 1 fmt.Println("Элемент по индексу 1: num =", num) - /* Обновление элемента */ - nums[1] = 0 // Обновить элемент по индексу 1 до 0 - fmt.Println("После обновления элемента по индексу 1 до 0 nums =", nums) + /* Изменение элемента */ + nums[1] = 0 // Изменить значение элемента с индексом 1 на 0 + fmt.Println("После изменения значения элемента с индексом 1 на 0 nums =", nums) /* Очистить список */ nums = nil diff --git a/ru/codes/go/chapter_array_and_linkedlist/my_list.go b/ru/codes/go/chapter_array_and_linkedlist/my_list.go index eeb278bc2..87618ca28 100644 --- a/ru/codes/go/chapter_array_and_linkedlist/my_list.go +++ b/ru/codes/go/chapter_array_and_linkedlist/my_list.go @@ -41,7 +41,7 @@ func (l *myList) get(index int) int { return l.arr[index] } -/* Обновление элемента */ +/* Изменение элемента */ func (l *myList) set(num, index int) { if index < 0 || index >= l.arrSize { panic("индекс выходит за границы") @@ -69,7 +69,7 @@ func (l *myList) insert(num, index int) { if l.arrSize == l.arrCapacity { l.extendCapacity() } - // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию вправо for j := l.arrSize - 1; j >= index; j-- { l.arr[j+1] = l.arr[j] } @@ -84,7 +84,7 @@ func (l *myList) remove(index int) int { panic("индекс выходит за границы") } num := l.arr[index] - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for j := index; j < l.arrSize-1; j++ { l.arr[j] = l.arr[j+1] } diff --git a/ru/codes/go/chapter_array_and_linkedlist/my_list_test.go b/ru/codes/go/chapter_array_and_linkedlist/my_list_test.go index 0ad6f8c33..b963b6c7d 100644 --- a/ru/codes/go/chapter_array_and_linkedlist/my_list_test.go +++ b/ru/codes/go/chapter_array_and_linkedlist/my_list_test.go @@ -33,9 +33,9 @@ func TestMyList(t *testing.T) { num := nums.get(1) fmt.Printf("Элемент по индексу 1: num = %v\n", num) - /* Обновление элемента */ + /* Изменение элемента */ nums.set(0, 1) - fmt.Printf("После обновления элемента по индексу 1 до 0 nums = %v\n", nums.toArray()) + fmt.Printf("После изменения значения элемента с индексом 1 на 0 nums = %v\n", nums.toArray()) /* Проверка механизма расширения */ for i := 0; i < 10; i++ { diff --git a/ru/codes/go/chapter_divide_and_conquer/binary_search_recur.go b/ru/codes/go/chapter_divide_and_conquer/binary_search_recur.go index 4e1daa6a8..54f4b40c9 100644 --- a/ru/codes/go/chapter_divide_and_conquer/binary_search_recur.go +++ b/ru/codes/go/chapter_divide_and_conquer/binary_search_recur.go @@ -4,7 +4,7 @@ package chapter_divide_and_conquer -/* Бинарный поиск: задача f(i, j) */ +/* Двоичный поиск: задача f(i, j) */ func dfs(nums []int, target, i, j int) int { // Если интервал пуст, это означает отсутствие целевого элемента, вернуть -1 if i > j { @@ -27,7 +27,7 @@ func dfs(nums []int, target, i, j int) int { } } -/* Бинарный поиск */ +/* Двоичный поиск */ func binarySearch(nums []int, target int) int { n := len(nums) return dfs(nums, target, 0, n-1) diff --git a/ru/codes/go/chapter_searching/binary_search.go b/ru/codes/go/chapter_searching/binary_search.go index 37672f9f0..316596aea 100644 --- a/ru/codes/go/chapter_searching/binary_search.go +++ b/ru/codes/go/chapter_searching/binary_search.go @@ -4,9 +4,9 @@ package chapter_searching -/* Бинарный поиск (двусторонне замкнутый интервал) */ +/* Двоичный поиск (замкнутый интервал) */ func binarySearch(nums []int, target int) int { - // Инициализировать двусторонне замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно + // Инициализировать замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно i, j := 0, len(nums)-1 // Цикл завершается, когда диапазон поиска пуст (при i > j диапазон пуст) for i <= j { @@ -23,9 +23,9 @@ func binarySearch(nums []int, target int) int { return -1 } -/* Бинарный поиск (лево замкнутый, право открытый интервал) */ +/* Двоичный поиск (интервал, замкнутый слева и открытый справа) */ func binarySearchLCRO(nums []int, target int) int { - // Инициализировать лево замкнутый, право открытый интервал [0, n), то есть i и j указывают на первый элемент массива и позицию сразу за последним элементом соответственно + // Инициализация интервала [0, n), замкнутого слева и открытого справа: i указывает на первый элемент массива, а j — на позицию сразу за последним i, j := 0, len(nums) // Цикл завершается, когда диапазон поиска пуст (при i = j диапазон пуст) for i < j { diff --git a/ru/codes/go/chapter_searching/binary_search_edge.go b/ru/codes/go/chapter_searching/binary_search_edge.go index d532c5859..9660ca2ab 100644 --- a/ru/codes/go/chapter_searching/binary_search_edge.go +++ b/ru/codes/go/chapter_searching/binary_search_edge.go @@ -4,7 +4,7 @@ package chapter_searching -/* Бинарный поиск самого левого target */ +/* Двоичный поиск самого левого элемента target */ func binarySearchLeftEdge(nums []int, target int) int { // Эквивалентно поиску точки вставки target i := binarySearchInsertion(nums, target) @@ -12,11 +12,11 @@ func binarySearchLeftEdge(nums []int, target int) int { if i == len(nums) || nums[i] != target { return -1 } - // Найти target и вернуть индекс i + // target найден, возвращается индекс i return i } -/* Бинарный поиск самого правого target */ +/* Двоичный поиск самого правого элемента target */ func binarySearchRightEdge(nums []int, target int) int { // Преобразовать задачу в поиск самого левого target + 1 i := binarySearchInsertion(nums, target+1) @@ -26,6 +26,6 @@ func binarySearchRightEdge(nums []int, target int) int { if j == -1 || nums[j] != target { return -1 } - // Найти target и вернуть индекс j + // target найден, возвращается индекс j return j } diff --git a/ru/codes/go/chapter_searching/binary_search_insertion.go b/ru/codes/go/chapter_searching/binary_search_insertion.go index a3f017130..f72259942 100644 --- a/ru/codes/go/chapter_searching/binary_search_insertion.go +++ b/ru/codes/go/chapter_searching/binary_search_insertion.go @@ -4,9 +4,9 @@ package chapter_searching -/* Бинарный поиск точки вставки (без повторяющихся элементов) */ +/* Двоичный поиск точки вставки (без повторяющихся элементов) */ func binarySearchInsertionSimple(nums []int, target int) int { - // Инициализировать двусторонне замкнутый интервал [0, n-1] + // Инициализировать замкнутый интервал [0, n-1] i, j := 0, len(nums)-1 for i <= j { // Вычислить индекс середины m @@ -18,7 +18,7 @@ func binarySearchInsertionSimple(nums []int, target int) int { // target находится в интервале [i, m-1] j = m - 1 } else { - // Найти target и вернуть точку вставки m + // target найден, возвращается точка вставки m return m } } @@ -26,9 +26,9 @@ func binarySearchInsertionSimple(nums []int, target int) int { return i } -/* Бинарный поиск точки вставки (с повторяющимися элементами) */ +/* Двоичный поиск точки вставки (с повторяющимися элементами) */ func binarySearchInsertion(nums []int, target int) int { - // Инициализировать двусторонне замкнутый интервал [0, n-1] + // Инициализировать замкнутый интервал [0, n-1] i, j := 0, len(nums)-1 for i <= j { // Вычислить индекс середины m diff --git a/ru/codes/go/chapter_searching/binary_search_test.go b/ru/codes/go/chapter_searching/binary_search_test.go index a523d2732..a442c9d5a 100644 --- a/ru/codes/go/chapter_searching/binary_search_test.go +++ b/ru/codes/go/chapter_searching/binary_search_test.go @@ -15,7 +15,7 @@ func TestBinarySearch(t *testing.T) { nums = []int{1, 3, 6, 8, 12, 15, 23, 26, 31, 35} expected = 2 ) - // Выполнить бинарный поиск в массиве + // Выполнить двоичный поиск в массиве actual := binarySearch(nums, target) fmt.Println("Индекс целевого элемента 6 =", actual) if actual != expected { @@ -28,7 +28,7 @@ func TestBinarySearchEdge(t *testing.T) { nums := []int{1, 3, 6, 8, 12, 15, 23, 26, 31, 35} fmt.Println("\nМассив nums =", nums) - // Бинарный поиск левой и правой границы + // Двоичный поиск левой и правой границы for _, target := range []int{6, 7} { index := binarySearchLeftEdge(nums, target) fmt.Println("Индекс самого левого элемента", target, "равен", index) @@ -43,7 +43,7 @@ func TestBinarySearchInsertion(t *testing.T) { nums := []int{1, 3, 6, 8, 12, 15, 23, 26, 31, 35} fmt.Println("Массив nums =", nums) - // Бинарный поиск точки вставки + // Двоичный поиск точки вставки for _, target := range []int{6, 9} { index := binarySearchInsertionSimple(nums, target) fmt.Println("Индекс позиции вставки элемента", target, "равен", index) @@ -53,7 +53,7 @@ func TestBinarySearchInsertion(t *testing.T) { nums = []int{1, 3, 6, 6, 6, 6, 6, 10, 12, 15} fmt.Println("\nМассив nums =", nums) - // Бинарный поиск точки вставки + // Двоичный поиск точки вставки for _, target := range []int{2, 6, 20} { index := binarySearchInsertion(nums, target) fmt.Println("Индекс позиции вставки элемента", target, "равен", index) diff --git a/ru/codes/go/chapter_searching/linear_search.go b/ru/codes/go/chapter_searching/linear_search.go index 83b22fa70..96a030d66 100644 --- a/ru/codes/go/chapter_searching/linear_search.go +++ b/ru/codes/go/chapter_searching/linear_search.go @@ -25,7 +25,7 @@ func linearSearchArray(nums []int, target int) int { func linearSearchLinkedList(node *ListNode, target int) *ListNode { // Обойти связный список for node != nil { - // Найти целевой узел и вернуть его + // Целевой узел найден, возвращается этот узел if node.Val == target { return node } diff --git a/ru/codes/java/chapter_array_and_linkedlist/array.java b/ru/codes/java/chapter_array_and_linkedlist/array.java index a23338b00..4a786d169 100644 --- a/ru/codes/java/chapter_array_and_linkedlist/array.java +++ b/ru/codes/java/chapter_array_and_linkedlist/array.java @@ -12,14 +12,14 @@ import java.util.concurrent.ThreadLocalRandom; public class array { /* Случайный доступ к элементу */ static int randomAccess(int[] nums) { - // Случайным образом выбрать число из интервала [0, nums.length) + // Случайный выбор числа из диапазона [0, nums.length) int randomIndex = ThreadLocalRandom.current().nextInt(0, nums.length); // Получить и вернуть случайный элемент int randomNum = nums[randomIndex]; return randomNum; } - /* Увеличить длину массива */ + /* Увеличение длины массива */ static int[] extend(int[] nums, int enlarge) { // Инициализировать массив увеличенной длины int[] res = new int[nums.length + enlarge]; @@ -31,9 +31,9 @@ public class array { return res; } - /* Вставить элемент num по индексу index в массив */ + /* Вставка элемента num в массив по индексу index */ static void insert(int[] nums, int num, int index) { - // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию вправо for (int i = nums.length - 1; i > index; i--) { nums[i] = nums[i - 1]; } @@ -41,9 +41,9 @@ public class array { nums[index] = num; } - /* Удалить элемент по индексу index */ + /* Удаление элемента по индексу index */ static void remove(int[] nums, int index) { - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for (int i = index; i < nums.length - 1; i++) { nums[i] = nums[i + 1]; } @@ -62,7 +62,7 @@ public class array { } } - /* Найти заданный элемент в массиве */ + /* Поиск заданного элемента в массиве */ static int find(int[] nums, int target) { for (int i = 0; i < nums.length; i++) { if (nums[i] == target) diff --git a/ru/codes/java/chapter_array_and_linkedlist/linked_list.java b/ru/codes/java/chapter_array_and_linkedlist/linked_list.java index 7b74e5e7b..72368fe37 100644 --- a/ru/codes/java/chapter_array_and_linkedlist/linked_list.java +++ b/ru/codes/java/chapter_array_and_linkedlist/linked_list.java @@ -9,14 +9,14 @@ package chapter_array_and_linkedlist; import utils.*; public class linked_list { - /* Вставить узел P после узла n0 в связном списке */ + /* Вставка узла P в связный список после узла n0 */ static void insert(ListNode n0, ListNode P) { ListNode n1 = n0.next; P.next = n1; n0.next = P; } - /* Удалить первый узел после узла n0 в связном списке */ + /* Удаление первого узла после узла n0 из связного списка */ static void remove(ListNode n0) { if (n0.next == null) return; @@ -26,7 +26,7 @@ public class linked_list { n0.next = n1; } - /* Доступ к узлу связного списка по индексу index */ + /* Доступ к узлу с индексом index в связном списке */ static ListNode access(ListNode head, int index) { for (int i = 0; i < index; i++) { if (head == null) @@ -36,7 +36,7 @@ public class linked_list { return head; } - /* Найти в связном списке первый узел со значением target */ + /* Поиск первого узла со значением target в связном списке */ static int find(ListNode head, int target) { int index = 0; while (head != null) { diff --git a/ru/codes/java/chapter_array_and_linkedlist/list.java b/ru/codes/java/chapter_array_and_linkedlist/list.java index cbb5c4beb..723c4435f 100644 --- a/ru/codes/java/chapter_array_and_linkedlist/list.java +++ b/ru/codes/java/chapter_array_and_linkedlist/list.java @@ -20,9 +20,9 @@ public class list { int num = nums.get(1); System.out.println("Элемент по индексу 1: num = " + num); - /* Обновление элемента */ + /* Изменение элемента */ nums.set(1, 0); - System.out.println("После обновления элемента по индексу 1 до 0 nums = " + nums); + System.out.println("После изменения значения элемента с индексом 1 на 0 nums = " + nums); /* Очистить список */ nums.clear(); diff --git a/ru/codes/java/chapter_array_and_linkedlist/my_list.java b/ru/codes/java/chapter_array_and_linkedlist/my_list.java index db42a96da..65feceb21 100644 --- a/ru/codes/java/chapter_array_and_linkedlist/my_list.java +++ b/ru/codes/java/chapter_array_and_linkedlist/my_list.java @@ -38,7 +38,7 @@ class MyList { return arr[index]; } - /* Обновление элемента */ + /* Изменение элемента */ public void set(int index, int num) { if (index < 0 || index >= size) throw new IndexOutOfBoundsException("индекс выходит за границы"); @@ -62,7 +62,7 @@ class MyList { // При превышении вместимости по числу элементов запускается расширение if (size == capacity()) extendCapacity(); - // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию вправо for (int j = size - 1; j >= index; j--) { arr[j + 1] = arr[j]; } @@ -76,7 +76,7 @@ class MyList { if (index < 0 || index >= size) throw new IndexOutOfBoundsException("индекс выходит за границы"); int num = arr[index]; - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for (int j = index; j < size - 1; j++) { arr[j] = arr[j + 1]; } @@ -132,9 +132,9 @@ public class my_list { int num = nums.get(1); System.out.println("Элемент по индексу 1: num = " + num); - /* Обновление элемента */ + /* Изменение элемента */ nums.set(1, 0); - System.out.println("После обновления элемента по индексу 1 до 0 nums = " + Arrays.toString(nums.toArray())); + System.out.println("После изменения значения элемента с индексом 1 на 0 nums = " + Arrays.toString(nums.toArray())); /* Проверка механизма расширения */ for (int i = 0; i < 10; i++) { diff --git a/ru/codes/java/chapter_divide_and_conquer/binary_search_recur.java b/ru/codes/java/chapter_divide_and_conquer/binary_search_recur.java index 55a2640b9..f878854d4 100644 --- a/ru/codes/java/chapter_divide_and_conquer/binary_search_recur.java +++ b/ru/codes/java/chapter_divide_and_conquer/binary_search_recur.java @@ -7,7 +7,7 @@ package chapter_divide_and_conquer; public class binary_search_recur { - /* Бинарный поиск: задача f(i, j) */ + /* Двоичный поиск: задача f(i, j) */ static int dfs(int[] nums, int target, int i, int j) { // Если интервал пуст, целевой элемент отсутствует, вернуть -1 if (i > j) { @@ -27,7 +27,7 @@ public class binary_search_recur { } } - /* Бинарный поиск */ + /* Двоичный поиск */ static int binarySearch(int[] nums, int target) { int n = nums.length; // Решить задачу f(0, n-1) @@ -38,7 +38,7 @@ public class binary_search_recur { int target = 6; int[] nums = { 1, 3, 6, 8, 12, 15, 23, 26, 31, 35 }; - // Бинарный поиск (двусторонне замкнутый интервал) + // Двоичный поиск (замкнутый интервал) int index = binarySearch(nums, target); System.out.println("Индекс целевого элемента 6 = " + index); } diff --git a/ru/codes/java/chapter_searching/binary_search.java b/ru/codes/java/chapter_searching/binary_search.java index dbf2d2bd0..412993ef4 100644 --- a/ru/codes/java/chapter_searching/binary_search.java +++ b/ru/codes/java/chapter_searching/binary_search.java @@ -7,9 +7,9 @@ package chapter_searching; public class binary_search { - /* Бинарный поиск (двусторонне замкнутый интервал) */ + /* Двоичный поиск (замкнутый интервал) */ static int binarySearch(int[] nums, int target) { - // Инициализировать двусторонне замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно + // Инициализировать замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно int i = 0, j = nums.length - 1; // Цикл завершается, когда диапазон поиска пуст (при i > j диапазон пуст) while (i <= j) { @@ -25,9 +25,9 @@ public class binary_search { return -1; } - /* Бинарный поиск (лево замкнутый, право открытый интервал) */ + /* Двоичный поиск (интервал, замкнутый слева и открытый справа) */ static int binarySearchLCRO(int[] nums, int target) { - // Инициализировать лево замкнутый, право открытый интервал [0, n), то есть i и j указывают на первый элемент массива и позицию сразу за последним элементом соответственно + // Инициализация интервала [0, n), замкнутого слева и открытого справа: i указывает на первый элемент массива, а j — на позицию сразу за последним int i = 0, j = nums.length; // Цикл завершается, когда диапазон поиска пуст (при i = j диапазон пуст) while (i < j) { @@ -47,11 +47,11 @@ public class binary_search { int target = 6; int[] nums = { 1, 3, 6, 8, 12, 15, 23, 26, 31, 35 }; - /* Бинарный поиск (двусторонне замкнутый интервал) */ + /* Двоичный поиск (замкнутый интервал) */ int index = binarySearch(nums, target); System.out.println("Индекс целевого элемента 6 = " + index); - /* Бинарный поиск (лево замкнутый, право открытый интервал) */ + /* Двоичный поиск (интервал, замкнутый слева и открытый справа) */ index = binarySearchLCRO(nums, target); System.out.println("Индекс целевого элемента 6 = " + index); } diff --git a/ru/codes/java/chapter_searching/binary_search_edge.java b/ru/codes/java/chapter_searching/binary_search_edge.java index 5faec635b..b51ab52f8 100644 --- a/ru/codes/java/chapter_searching/binary_search_edge.java +++ b/ru/codes/java/chapter_searching/binary_search_edge.java @@ -7,7 +7,7 @@ package chapter_searching; public class binary_search_edge { - /* Бинарный поиск самого левого target */ + /* Двоичный поиск самого левого элемента target */ static int binarySearchLeftEdge(int[] nums, int target) { // Эквивалентно поиску точки вставки target int i = binary_search_insertion.binarySearchInsertion(nums, target); @@ -15,11 +15,11 @@ public class binary_search_edge { if (i == nums.length || nums[i] != target) { return -1; } - // Найти target и вернуть индекс i + // target найден, возвращается индекс i return i; } - /* Бинарный поиск самого правого target */ + /* Двоичный поиск самого правого элемента target */ static int binarySearchRightEdge(int[] nums, int target) { // Преобразовать задачу в поиск самого левого target + 1 int i = binary_search_insertion.binarySearchInsertion(nums, target + 1); @@ -29,7 +29,7 @@ public class binary_search_edge { if (j == -1 || nums[j] != target) { return -1; } - // Найти target и вернуть индекс j + // target найден, возвращается индекс j return j; } @@ -38,7 +38,7 @@ public class binary_search_edge { int[] nums = { 1, 3, 6, 6, 6, 6, 6, 10, 12, 15 }; System.out.println("\nМассив nums = " + java.util.Arrays.toString(nums)); - // Бинарный поиск левой и правой границы + // Двоичный поиск левой и правой границы for (int target : new int[] { 6, 7 }) { int index = binarySearchLeftEdge(nums, target); System.out.println("Индекс самого левого элемента " + target + " равен " + index); diff --git a/ru/codes/java/chapter_searching/binary_search_insertion.java b/ru/codes/java/chapter_searching/binary_search_insertion.java index b8516ce3d..99d0e281a 100644 --- a/ru/codes/java/chapter_searching/binary_search_insertion.java +++ b/ru/codes/java/chapter_searching/binary_search_insertion.java @@ -7,9 +7,9 @@ package chapter_searching; class binary_search_insertion { - /* Бинарный поиск точки вставки (без повторяющихся элементов) */ + /* Двоичный поиск точки вставки (без повторяющихся элементов) */ static int binarySearchInsertionSimple(int[] nums, int target) { - int i = 0, j = nums.length - 1; // Инициализировать двусторонне замкнутый интервал [0, n-1] + int i = 0, j = nums.length - 1; // Инициализировать замкнутый интервал [0, n-1] while (i <= j) { int m = i + (j - i) / 2; // Вычислить индекс середины m if (nums[m] < target) { @@ -17,16 +17,16 @@ class binary_search_insertion { } else if (nums[m] > target) { j = m - 1; // target находится в интервале [i, m-1] } else { - return m; // Найти target и вернуть точку вставки m + return m; // target найден, возвращается точка вставки m } } // target не найден, вернуть точку вставки i return i; } - /* Бинарный поиск точки вставки (с повторяющимися элементами) */ + /* Двоичный поиск точки вставки (с повторяющимися элементами) */ static int binarySearchInsertion(int[] nums, int target) { - int i = 0, j = nums.length - 1; // Инициализировать двусторонне замкнутый интервал [0, n-1] + int i = 0, j = nums.length - 1; // Инициализировать замкнутый интервал [0, n-1] while (i <= j) { int m = i + (j - i) / 2; // Вычислить индекс середины m if (nums[m] < target) { @@ -45,7 +45,7 @@ class binary_search_insertion { // Массив без повторяющихся элементов int[] nums = { 1, 3, 6, 8, 12, 15, 23, 26, 31, 35 }; System.out.println("\nМассив nums = " + java.util.Arrays.toString(nums)); - // Бинарный поиск точки вставки + // Двоичный поиск точки вставки for (int target : new int[] { 6, 9 }) { int index = binarySearchInsertionSimple(nums, target); System.out.println("Индекс позиции вставки элемента " + target + " равен " + index); @@ -54,7 +54,7 @@ class binary_search_insertion { // Массив с повторяющимися элементами nums = new int[] { 1, 3, 6, 6, 6, 6, 6, 10, 12, 15 }; System.out.println("\nМассив nums = " + java.util.Arrays.toString(nums)); - // Бинарный поиск точки вставки + // Двоичный поиск точки вставки for (int target : new int[] { 2, 6, 20 }) { int index = binarySearchInsertion(nums, target); System.out.println("Индекс позиции вставки элемента " + target + " равен " + index); diff --git a/ru/codes/java/chapter_searching/linear_search.java b/ru/codes/java/chapter_searching/linear_search.java index 59b6c0778..a50b81875 100644 --- a/ru/codes/java/chapter_searching/linear_search.java +++ b/ru/codes/java/chapter_searching/linear_search.java @@ -25,7 +25,7 @@ public class linear_search { static ListNode linearSearchLinkedList(ListNode head, int target) { // Обойти связный список while (head != null) { - // Найти целевой узел и вернуть его + // Целевой узел найден, возвращается этот узел if (head.val == target) return head; head = head.next; diff --git a/ru/codes/javascript/chapter_array_and_linkedlist/array.js b/ru/codes/javascript/chapter_array_and_linkedlist/array.js index 2fcc45e7d..d79044f2f 100644 --- a/ru/codes/javascript/chapter_array_and_linkedlist/array.js +++ b/ru/codes/javascript/chapter_array_and_linkedlist/array.js @@ -6,14 +6,14 @@ /* Случайный доступ к элементу */ function randomAccess(nums) { - // Случайным образом выбрать число из интервала [0, nums.length) + // Случайный выбор числа из диапазона [0, nums.length) const random_index = Math.floor(Math.random() * nums.length); // Получить и вернуть случайный элемент const random_num = nums[random_index]; return random_num; } -/* Увеличить длину массива */ +/* Увеличение длины массива */ // Обратите внимание: Array в JavaScript — это динамический массив, его можно расширять напрямую // Для удобства обучения в этой функции Array рассматривается как массив неизменяемой длины function extend(nums, enlarge) { @@ -27,9 +27,9 @@ function extend(nums, enlarge) { return res; } -/* Вставить элемент num по индексу index в массив */ +/* Вставка элемента num в массив по индексу index */ function insert(nums, num, index) { - // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию вправо for (let i = nums.length - 1; i > index; i--) { nums[i] = nums[i - 1]; } @@ -37,9 +37,9 @@ function insert(nums, num, index) { nums[index] = num; } -/* Удалить элемент по индексу index */ +/* Удаление элемента по индексу index */ function remove(nums, index) { - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for (let i = index; i < nums.length - 1; i++) { nums[i] = nums[i + 1]; } @@ -58,7 +58,7 @@ function traverse(nums) { } } -/* Найти заданный элемент в массиве */ +/* Поиск заданного элемента в массиве */ function find(nums, target) { for (let i = 0; i < nums.length; i++) { if (nums[i] === target) return i; diff --git a/ru/codes/javascript/chapter_array_and_linkedlist/linked_list.js b/ru/codes/javascript/chapter_array_and_linkedlist/linked_list.js index c31c77b5d..491db83e7 100644 --- a/ru/codes/javascript/chapter_array_and_linkedlist/linked_list.js +++ b/ru/codes/javascript/chapter_array_and_linkedlist/linked_list.js @@ -7,14 +7,14 @@ const { printLinkedList } = require('../modules/PrintUtil'); const { ListNode } = require('../modules/ListNode'); -/* Вставить узел P после узла n0 в связном списке */ +/* Вставка узла P в связный список после узла n0 */ function insert(n0, P) { const n1 = n0.next; P.next = n1; n0.next = P; } -/* Удалить первый узел после узла n0 в связном списке */ +/* Удаление первого узла после узла n0 из связного списка */ function remove(n0) { if (!n0.next) return; // n0 -> P -> n1 @@ -23,7 +23,7 @@ function remove(n0) { n0.next = n1; } -/* Доступ к узлу связного списка по индексу index */ +/* Доступ к узлу с индексом index в связном списке */ function access(head, index) { for (let i = 0; i < index; i++) { if (!head) { @@ -34,7 +34,7 @@ function access(head, index) { return head; } -/* Найти в связном списке первый узел со значением target */ +/* Поиск первого узла со значением target в связном списке */ function find(head, target) { let index = 0; while (head !== null) { diff --git a/ru/codes/javascript/chapter_array_and_linkedlist/list.js b/ru/codes/javascript/chapter_array_and_linkedlist/list.js index 0f76e6e89..793cd1e40 100644 --- a/ru/codes/javascript/chapter_array_and_linkedlist/list.js +++ b/ru/codes/javascript/chapter_array_and_linkedlist/list.js @@ -12,9 +12,9 @@ console.log(`Список nums = ${nums}`); const num = nums[1]; console.log(`Элемент по индексу 1: num = ${num}`); -/* Обновление элемента */ +/* Изменение элемента */ nums[1] = 0; -console.log(`После обновления элемента по индексу 1 до 0 nums = ${nums}`); +console.log(`После изменения значения элемента с индексом 1 на 0 nums = ${nums}`); /* Очистить список */ nums.length = 0; diff --git a/ru/codes/javascript/chapter_array_and_linkedlist/my_list.js b/ru/codes/javascript/chapter_array_and_linkedlist/my_list.js index a75ff76bc..6216c240b 100644 --- a/ru/codes/javascript/chapter_array_and_linkedlist/my_list.js +++ b/ru/codes/javascript/chapter_array_and_linkedlist/my_list.js @@ -33,7 +33,7 @@ class MyList { return this.#arr[index]; } - /* Обновление элемента */ + /* Изменение элемента */ set(index, num) { if (index < 0 || index >= this.#size) throw new Error('индекс выходит за границы'); this.#arr[index] = num; @@ -57,7 +57,7 @@ class MyList { if (this.#size === this.#capacity) { this.extendCapacity(); } - // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию вправо for (let j = this.#size - 1; j >= index; j--) { this.#arr[j + 1] = this.#arr[j]; } @@ -70,7 +70,7 @@ class MyList { remove(index) { if (index < 0 || index >= this.#size) throw new Error('индекс выходит за границы'); let num = this.#arr[index]; - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for (let j = index; j < this.#size - 1; j++) { this.#arr[j] = this.#arr[j + 1]; } @@ -127,9 +127,9 @@ console.log(`После удаления элемента по индексу 3 const num = nums.get(1); console.log(`Элемент по индексу 1: num = ${num}`); -/* Обновление элемента */ +/* Изменение элемента */ nums.set(1, 0); -console.log(`После обновления элемента по индексу 1 до 0 nums = ${nums.toArray()}`); +console.log(`После изменения значения элемента с индексом 1 на 0 nums = ${nums.toArray()}`); /* Проверка механизма расширения */ for (let i = 0; i < 10; i++) { diff --git a/ru/codes/javascript/chapter_divide_and_conquer/binary_search_recur.js b/ru/codes/javascript/chapter_divide_and_conquer/binary_search_recur.js index 5913fcafc..f895d07af 100644 --- a/ru/codes/javascript/chapter_divide_and_conquer/binary_search_recur.js +++ b/ru/codes/javascript/chapter_divide_and_conquer/binary_search_recur.js @@ -4,7 +4,7 @@ * Author: yuan0221 (yl1452491917@gmail.com) */ -/* Бинарный поиск: задача f(i, j) */ +/* Двоичный поиск: задача f(i, j) */ function dfs(nums, target, i, j) { // Если интервал пуст, целевой элемент отсутствует, вернуть -1 if (i > j) { @@ -24,7 +24,7 @@ function dfs(nums, target, i, j) { } } -/* Бинарный поиск */ +/* Двоичный поиск */ function binarySearch(nums, target) { const n = nums.length; // Решить задачу f(0, n-1) @@ -34,6 +34,6 @@ function binarySearch(nums, target) { /* Driver Code */ const target = 6; const nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]; -// Бинарный поиск (двусторонне замкнутый интервал) +// Двоичный поиск (замкнутый интервал) const index = binarySearch(nums, target); console.log(`Индекс целевого элемента 6 = ${index}`); diff --git a/ru/codes/javascript/chapter_searching/binary_search.js b/ru/codes/javascript/chapter_searching/binary_search.js index 826289256..82371fb26 100644 --- a/ru/codes/javascript/chapter_searching/binary_search.js +++ b/ru/codes/javascript/chapter_searching/binary_search.js @@ -4,9 +4,9 @@ * Author: JoseHung (szhong@link.cuhk.edu.hk) */ -/* Бинарный поиск (двусторонне замкнутый интервал) */ +/* Двоичный поиск (замкнутый интервал) */ function binarySearch(nums, target) { - // Инициализировать двусторонне замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно + // Инициализировать замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно let i = 0, j = nums.length - 1; // Цикл завершается, когда диапазон поиска пуст (при i > j диапазон пуст) @@ -25,9 +25,9 @@ function binarySearch(nums, target) { return -1; } -/* Бинарный поиск (лево замкнутый, право открытый интервал) */ +/* Двоичный поиск (интервал, замкнутый слева и открытый справа) */ function binarySearchLCRO(nums, target) { - // Инициализировать лево замкнутый, право открытый интервал [0, n), то есть i и j указывают на первый элемент массива и позицию сразу за последним элементом соответственно + // Инициализация интервала [0, n), замкнутого слева и открытого справа: i указывает на первый элемент массива, а j — на позицию сразу за последним let i = 0, j = nums.length; // Цикл завершается, когда диапазон поиска пуст (при i = j диапазон пуст) @@ -51,10 +51,10 @@ function binarySearchLCRO(nums, target) { const target = 6; const nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]; -/* Бинарный поиск (двусторонне замкнутый интервал) */ +/* Двоичный поиск (замкнутый интервал) */ let index = binarySearch(nums, target); console.log('Индекс целевого элемента 6 = ' + index); -/* Бинарный поиск (лево замкнутый, право открытый интервал) */ +/* Двоичный поиск (интервал, замкнутый слева и открытый справа) */ index = binarySearchLCRO(nums, target); console.log('Индекс целевого элемента 6 = ' + index); diff --git a/ru/codes/javascript/chapter_searching/binary_search_edge.js b/ru/codes/javascript/chapter_searching/binary_search_edge.js index 2e8718aa3..c984107cf 100644 --- a/ru/codes/javascript/chapter_searching/binary_search_edge.js +++ b/ru/codes/javascript/chapter_searching/binary_search_edge.js @@ -6,7 +6,7 @@ const { binarySearchInsertion } = require('./binary_search_insertion.js'); -/* Бинарный поиск самого левого target */ +/* Двоичный поиск самого левого элемента target */ function binarySearchLeftEdge(nums, target) { // Эквивалентно поиску точки вставки target const i = binarySearchInsertion(nums, target); @@ -14,11 +14,11 @@ function binarySearchLeftEdge(nums, target) { if (i === nums.length || nums[i] !== target) { return -1; } - // Найти target и вернуть индекс i + // target найден, возвращается индекс i return i; } -/* Бинарный поиск самого правого target */ +/* Двоичный поиск самого правого элемента target */ function binarySearchRightEdge(nums, target) { // Преобразовать задачу в поиск самого левого target + 1 const i = binarySearchInsertion(nums, target + 1); @@ -28,7 +28,7 @@ function binarySearchRightEdge(nums, target) { if (j === -1 || nums[j] !== target) { return -1; } - // Найти target и вернуть индекс j + // target найден, возвращается индекс j return j; } @@ -36,7 +36,7 @@ function binarySearchRightEdge(nums, target) { // Массив с повторяющимися элементами const nums = [1, 3, 6, 6, 6, 6, 6, 10, 12, 15]; console.log('\nМассив nums = ' + nums); -// Бинарный поиск левой и правой границы +// Двоичный поиск левой и правой границы for (const target of [6, 7]) { let index = binarySearchLeftEdge(nums, target); console.log('Индекс самого левого элемента ' + target + ' равен ' + index); diff --git a/ru/codes/javascript/chapter_searching/binary_search_insertion.js b/ru/codes/javascript/chapter_searching/binary_search_insertion.js index 98346f2d5..2f122ff31 100644 --- a/ru/codes/javascript/chapter_searching/binary_search_insertion.js +++ b/ru/codes/javascript/chapter_searching/binary_search_insertion.js @@ -4,10 +4,10 @@ * Author: Gaofer Chou (gaofer-chou@qq.com) */ -/* Бинарный поиск точки вставки (без повторяющихся элементов) */ +/* Двоичный поиск точки вставки (без повторяющихся элементов) */ function binarySearchInsertionSimple(nums, target) { let i = 0, - j = nums.length - 1; // Инициализировать двусторонне замкнутый интервал [0, n-1] + j = nums.length - 1; // Инициализировать замкнутый интервал [0, n-1] while (i <= j) { const m = Math.floor(i + (j - i) / 2); // Вычислить индекс середины m, используя Math.floor() для округления вниз if (nums[m] < target) { @@ -15,17 +15,17 @@ function binarySearchInsertionSimple(nums, target) { } else if (nums[m] > target) { j = m - 1; // target находится в интервале [i, m-1] } else { - return m; // Найти target и вернуть точку вставки m + return m; // target найден, возвращается точка вставки m } } // target не найден, вернуть точку вставки i return i; } -/* Бинарный поиск точки вставки (с повторяющимися элементами) */ +/* Двоичный поиск точки вставки (с повторяющимися элементами) */ function binarySearchInsertion(nums, target) { let i = 0, - j = nums.length - 1; // Инициализировать двусторонне замкнутый интервал [0, n-1] + j = nums.length - 1; // Инициализировать замкнутый интервал [0, n-1] while (i <= j) { const m = Math.floor(i + (j - i) / 2); // Вычислить индекс середины m, используя Math.floor() для округления вниз if (nums[m] < target) { @@ -44,7 +44,7 @@ function binarySearchInsertion(nums, target) { // Массив без повторяющихся элементов let nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]; console.log('\nМассив nums = ' + nums); -// Бинарный поиск точки вставки +// Двоичный поиск точки вставки for (const target of [6, 9]) { const index = binarySearchInsertionSimple(nums, target); console.log('Индекс позиции вставки элемента ' + target + ' равен ' + index); @@ -53,7 +53,7 @@ for (const target of [6, 9]) { // Массив с повторяющимися элементами nums = [1, 3, 6, 6, 6, 6, 6, 10, 12, 15]; console.log('\nМассив nums = ' + nums); -// Бинарный поиск точки вставки +// Двоичный поиск точки вставки for (const target of [2, 6, 20]) { const index = binarySearchInsertion(nums, target); console.log('Индекс позиции вставки элемента ' + target + ' равен ' + index); diff --git a/ru/codes/javascript/chapter_searching/linear_search.js b/ru/codes/javascript/chapter_searching/linear_search.js index abbc6bdfd..c9c5ba112 100644 --- a/ru/codes/javascript/chapter_searching/linear_search.js +++ b/ru/codes/javascript/chapter_searching/linear_search.js @@ -23,7 +23,7 @@ function linearSearchArray(nums, target) { function linearSearchLinkedList(head, target) { // Обойти связный список while (head) { - // Найти целевой узел и вернуть его + // Целевой узел найден, возвращается этот узел if (head.val === target) { return head; } diff --git a/ru/codes/javascript/chapter_stack_and_queue/linkedlist_deque.js b/ru/codes/javascript/chapter_stack_and_queue/linkedlist_deque.js index 4158dac26..d5ce5adae 100644 --- a/ru/codes/javascript/chapter_stack_and_queue/linkedlist_deque.js +++ b/ru/codes/javascript/chapter_stack_and_queue/linkedlist_deque.js @@ -88,7 +88,7 @@ class LinkedListDeque { if (this.#queSize === 0) { return null; } - const value = this.#front.val; // Сохраняем значение головного узла + const value = this.#front.val; // Сохранение значения головного узла // Если в очереди один элемент, начало и конец указывают на один узел if (this.#queSize === 1) { this.#front = null; diff --git a/ru/codes/kotlin/chapter_array_and_linkedlist/array.kt b/ru/codes/kotlin/chapter_array_and_linkedlist/array.kt index 4031bf16b..813045bb3 100644 --- a/ru/codes/kotlin/chapter_array_and_linkedlist/array.kt +++ b/ru/codes/kotlin/chapter_array_and_linkedlist/array.kt @@ -10,14 +10,14 @@ import java.util.concurrent.ThreadLocalRandom /* Случайный доступ к элементу */ fun randomAccess(nums: IntArray): Int { - // Случайным образом выбрать число из интервала [0, nums.size) + // Случайный выбор числа из диапазона [0, nums.size) val randomIndex = ThreadLocalRandom.current().nextInt(0, nums.size) // Получить и вернуть случайный элемент val randomNum = nums[randomIndex] return randomNum } -/* Увеличить длину массива */ +/* Увеличение длины массива */ fun extend(nums: IntArray, enlarge: Int): IntArray { // Инициализировать массив увеличенной длины val res = IntArray(nums.size + enlarge) @@ -29,9 +29,9 @@ fun extend(nums: IntArray, enlarge: Int): IntArray { return res } -/* Вставить элемент num по индексу index в массив */ +/* Вставка элемента num в массив по индексу index */ fun insert(nums: IntArray, num: Int, index: Int) { - // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию вправо for (i in nums.size - 1 downTo index + 1) { nums[i] = nums[i - 1] } @@ -39,9 +39,9 @@ fun insert(nums: IntArray, num: Int, index: Int) { nums[index] = num } -/* Удалить элемент по индексу index */ +/* Удаление элемента по индексу index */ fun remove(nums: IntArray, index: Int) { - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for (i in index..= size) throw IndexOutOfBoundsException("индекс выходит за границы") @@ -60,7 +60,7 @@ class MyList { // При превышении вместимости по числу элементов запускается расширение if (size == capacity()) extendCapacity() - // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию вправо for (j in size - 1 downTo index) arr[j + 1] = arr[j] arr[index] = num @@ -73,7 +73,7 @@ class MyList { if (index < 0 || index >= size) throw IndexOutOfBoundsException("индекс выходит за границы") val num = arr[index] - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for (j in index.. j диапазон пуст) @@ -25,9 +25,9 @@ fun binarySearch(nums: IntArray, target: Int): Int { return -1 } -/* Бинарный поиск (лево замкнутый, право открытый интервал) */ +/* Двоичный поиск (интервал, замкнутый слева и открытый справа) */ fun binarySearchLCRO(nums: IntArray, target: Int): Int { - // Инициализировать лево замкнутый, право открытый интервал [0, n), то есть i и j указывают на первый элемент массива и позицию сразу за последним элементом соответственно + // Инициализация интервала [0, n), замкнутого слева и открытого справа: i указывает на первый элемент массива, а j — на позицию сразу за последним var i = 0 var j = nums.size // Цикл завершается, когда диапазон поиска пуст (при i = j диапазон пуст) @@ -49,11 +49,11 @@ fun main() { val target = 6 val nums = intArrayOf(1, 3, 6, 8, 12, 15, 23, 26, 31, 35) - /* Бинарный поиск (двусторонне замкнутый интервал) */ + /* Двоичный поиск (замкнутый интервал) */ var index = binarySearch(nums, target) println("Индекс целевого элемента 6 = $index") - /* Бинарный поиск (лево замкнутый, право открытый интервал) */ + /* Двоичный поиск (интервал, замкнутый слева и открытый справа) */ index = binarySearchLCRO(nums, target) println("Индекс целевого элемента 6 = $index") } \ No newline at end of file diff --git a/ru/codes/kotlin/chapter_searching/binary_search_edge.kt b/ru/codes/kotlin/chapter_searching/binary_search_edge.kt index 8d18bc8e5..c1c78909f 100644 --- a/ru/codes/kotlin/chapter_searching/binary_search_edge.kt +++ b/ru/codes/kotlin/chapter_searching/binary_search_edge.kt @@ -6,7 +6,7 @@ package chapter_searching -/* Бинарный поиск самого левого target */ +/* Двоичный поиск самого левого элемента target */ fun binarySearchLeftEdge(nums: IntArray, target: Int): Int { // Эквивалентно поиску точки вставки target val i = binarySearchInsertion(nums, target) @@ -14,11 +14,11 @@ fun binarySearchLeftEdge(nums: IntArray, target: Int): Int { if (i == nums.size || nums[i] != target) { return -1 } - // Найти target и вернуть индекс i + // target найден, возвращается индекс i return i } -/* Бинарный поиск самого правого target */ +/* Двоичный поиск самого правого элемента target */ fun binarySearchRightEdge(nums: IntArray, target: Int): Int { // Преобразовать задачу в поиск самого левого target + 1 val i = binarySearchInsertion(nums, target + 1) @@ -28,7 +28,7 @@ fun binarySearchRightEdge(nums: IntArray, target: Int): Int { if (j == -1 || nums[j] != target) { return -1 } - // Найти target и вернуть индекс j + // target найден, возвращается индекс j return j } @@ -38,7 +38,7 @@ fun main() { val nums = intArrayOf(1, 3, 6, 6, 6, 6, 6, 10, 12, 15) println("\nМассив nums = ${nums.contentToString()}") - // Бинарный поиск левой и правой границы + // Двоичный поиск левой и правой границы for (target in intArrayOf(6, 7)) { var index = binarySearchLeftEdge(nums, target) println("Индекс самого левого элемента $target равен $index") diff --git a/ru/codes/kotlin/chapter_searching/binary_search_insertion.kt b/ru/codes/kotlin/chapter_searching/binary_search_insertion.kt index 82fa6397d..ab1a3e427 100644 --- a/ru/codes/kotlin/chapter_searching/binary_search_insertion.kt +++ b/ru/codes/kotlin/chapter_searching/binary_search_insertion.kt @@ -6,10 +6,10 @@ package chapter_searching -/* Бинарный поиск точки вставки (без повторяющихся элементов) */ +/* Двоичный поиск точки вставки (без повторяющихся элементов) */ fun binarySearchInsertionSimple(nums: IntArray, target: Int): Int { var i = 0 - var j = nums.size - 1 // Инициализировать двусторонне замкнутый интервал [0, n-1] + var j = nums.size - 1 // Инициализировать замкнутый интервал [0, n-1] while (i <= j) { val m = i + (j - i) / 2 // Вычислить индекс середины m if (nums[m] < target) { @@ -17,17 +17,17 @@ fun binarySearchInsertionSimple(nums: IntArray, target: Int): Int { } else if (nums[m] > target) { j = m - 1 // target находится в интервале [i, m-1] } else { - return m // Найти target и вернуть точку вставки m + return m // target найден, возвращается точка вставки m } } // target не найден, вернуть точку вставки i return i } -/* Бинарный поиск точки вставки (с повторяющимися элементами) */ +/* Двоичный поиск точки вставки (с повторяющимися элементами) */ fun binarySearchInsertion(nums: IntArray, target: Int): Int { var i = 0 - var j = nums.size - 1 // Инициализировать двусторонне замкнутый интервал [0, n-1] + var j = nums.size - 1 // Инициализировать замкнутый интервал [0, n-1] while (i <= j) { val m = i + (j - i) / 2 // Вычислить индекс середины m if (nums[m] < target) { @@ -47,7 +47,7 @@ fun main() { // Массив без повторяющихся элементов var nums = intArrayOf(1, 3, 6, 8, 12, 15, 23, 26, 31, 35) println("\nМассив nums = ${nums.contentToString()}") - // Бинарный поиск точки вставки + // Двоичный поиск точки вставки for (target in intArrayOf(6, 9)) { val index = binarySearchInsertionSimple(nums, target) println("Индекс позиции вставки элемента $target равен $index") @@ -57,7 +57,7 @@ fun main() { nums = intArrayOf(1, 3, 6, 6, 6, 6, 6, 10, 12, 15) println("\nМассив nums = ${nums.contentToString()}") - // Бинарный поиск точки вставки + // Двоичный поиск точки вставки for (target in intArrayOf(2, 6, 20)) { val index = binarySearchInsertion(nums, target) println("Индекс позиции вставки элемента $target равен $index") diff --git a/ru/codes/kotlin/chapter_searching/linear_search.kt b/ru/codes/kotlin/chapter_searching/linear_search.kt index b522e5d08..4739b15b2 100644 --- a/ru/codes/kotlin/chapter_searching/linear_search.kt +++ b/ru/codes/kotlin/chapter_searching/linear_search.kt @@ -25,7 +25,7 @@ fun linearSearchLinkedList(h: ListNode?, target: Int): ListNode? { // Обойти связный список var head = h while (head != null) { - // Найти целевой узел и вернуть его + // Целевой узел найден, возвращается этот узел if (head._val == target) return head head = head.next diff --git a/ru/codes/python/chapter_array_and_linkedlist/array.py b/ru/codes/python/chapter_array_and_linkedlist/array.py index 15955c67f..637338b7f 100644 --- a/ru/codes/python/chapter_array_and_linkedlist/array.py +++ b/ru/codes/python/chapter_array_and_linkedlist/array.py @@ -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 diff --git a/ru/codes/python/chapter_array_and_linkedlist/linked_list.py b/ru/codes/python/chapter_array_and_linkedlist/linked_list.py index f10174edc..9202ae560 100644 --- a/ru/codes/python/chapter_array_and_linkedlist/linked_list.py +++ b/ru/codes/python/chapter_array_and_linkedlist/linked_list.py @@ -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: diff --git a/ru/codes/python/chapter_array_and_linkedlist/list.py b/ru/codes/python/chapter_array_and_linkedlist/list.py index 0a77fadd5..9611f1054 100644 --- a/ru/codes/python/chapter_array_and_linkedlist/list.py +++ b/ru/codes/python/chapter_array_and_linkedlist/list.py @@ -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() diff --git a/ru/codes/python/chapter_array_and_linkedlist/my_list.py b/ru/codes/python/chapter_array_and_linkedlist/my_list.py index 08450f713..a87117f8e 100644 --- a/ru/codes/python/chapter_array_and_linkedlist/my_list.py +++ b/ru/codes/python/chapter_array_and_linkedlist/my_list.py @@ -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): diff --git a/ru/codes/python/chapter_divide_and_conquer/binary_search_recur.py b/ru/codes/python/chapter_divide_and_conquer/binary_search_recur.py index c556e5994..53bda159e 100644 --- a/ru/codes/python/chapter_divide_and_conquer/binary_search_recur.py +++ b/ru/codes/python/chapter_divide_and_conquer/binary_search_recur.py @@ -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) diff --git a/ru/codes/python/chapter_searching/binary_search.py b/ru/codes/python/chapter_searching/binary_search.py index 2a7177656..af64b4870 100644 --- a/ru/codes/python/chapter_searching/binary_search.py +++ b/ru/codes/python/chapter_searching/binary_search.py @@ -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) diff --git a/ru/codes/python/chapter_searching/binary_search_edge.py b/ru/codes/python/chapter_searching/binary_search_edge.py index 05f1684bb..fac027e4a 100644 --- a/ru/codes/python/chapter_searching/binary_search_edge.py +++ b/ru/codes/python/chapter_searching/binary_search_edge.py @@ -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}") diff --git a/ru/codes/python/chapter_searching/binary_search_insertion.py b/ru/codes/python/chapter_searching/binary_search_insertion.py index 86dfcaa64..c441c6283 100644 --- a/ru/codes/python/chapter_searching/binary_search_insertion.py +++ b/ru/codes/python/chapter_searching/binary_search_insertion.py @@ -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}") diff --git a/ru/codes/python/chapter_searching/linear_search.py b/ru/codes/python/chapter_searching/linear_search.py index 397fe1d7d..cd8da9267 100644 --- a/ru/codes/python/chapter_searching/linear_search.py +++ b/ru/codes/python/chapter_searching/linear_search.py @@ -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 diff --git a/ru/codes/pythontutor/chapter_array_and_linkedlist/array.md b/ru/codes/pythontutor/chapter_array_and_linkedlist/array.md index d6aa1ae0b..4531a4482 100644 --- a/ru/codes/pythontutor/chapter_array_and_linkedlist/array.md +++ b/ru/codes/pythontutor/chapter_array_and_linkedlist/array.md @@ -5,19 +5,19 @@ ---> -https://pythontutor.com/render.html#code=import%20random%0A%0Adef%20random_access%28nums%3A%20list%5Bint%5D%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%A1%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D1%8B%D0%B9%20%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%20%D0%BA%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%83%22%22%22%0A%20%20%20%20%23%20%D0%A1%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D1%8B%D0%BC%20%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%BC%20%D0%B2%D1%8B%D0%B1%D1%80%D0%B0%D1%82%D1%8C%20%D1%87%D0%B8%D1%81%D0%BB%D0%BE%20%D0%B8%D0%B7%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B0%20%5B0%2C%20len%28nums%29-1%5D%0A%20%20%20%20random_index%20%3D%20random.randint%280%2C%20len%28nums%29%20-%201%29%0A%20%20%20%20%23%20%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C%20%D0%B8%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D1%8B%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%0A%20%20%20%20random_num%20%3D%20nums%5Brandom_index%5D%0A%20%20%20%20return%20random_num%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%20%20%20%20print%28%22%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20nums%20%3D%22%2C%20nums%29%0A%0A%20%20%20%20%23%20%D0%A1%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D1%8B%D0%B9%20%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%0A%20%20%20%20random_num%3A%20int%20%3D%20random_access%28nums%29%0A%20%20%20%20print%28%22%D0%A1%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D1%8B%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%B8%D0%B7%20nums%20%3D%22%2C%20random_num%29&cumulative=false&curInstr=7&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false +https://pythontutor.com/render.html#code=import%20random%0A%0Adef%20random_access%28nums%3A%20list%5Bint%5D%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%A1%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D1%8B%D0%B9%20%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%20%D0%BA%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%83%22%22%22%0A%20%20%20%20%23%20%D0%A1%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D1%8B%D0%B9%20%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%20%D1%87%D0%B8%D1%81%D0%BB%D0%B0%20%D0%B8%D0%B7%20%D0%B4%D0%B8%D0%B0%D0%BF%D0%B0%D0%B7%D0%BE%D0%BD%D0%B0%20%5B0%2C%20len%28nums%29-1%5D%0A%20%20%20%20random_index%20%3D%20random.randint%280%2C%20len%28nums%29%20-%201%29%0A%20%20%20%20%23%20%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C%20%D0%B8%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D1%8B%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%0A%20%20%20%20random_num%20%3D%20nums%5Brandom_index%5D%0A%20%20%20%20return%20random_num%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%20%20%20%20print%28%22%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20nums%20%3D%22%2C%20nums%29%0A%0A%20%20%20%20%23%20%D0%A1%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D1%8B%D0%B9%20%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%0A%20%20%20%20random_num%3A%20int%20%3D%20random_access%28nums%29%0A%20%20%20%20print%28%22%D0%A1%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D1%8B%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%B8%D0%B7%20nums%20%3D%22%2C%20random_num%29&cumulative=false&curInstr=7&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false -https://pythontutor.com/render.html#code=def%20insert%28nums%3A%20list%5Bint%5D%2C%20num%3A%20int%2C%20index%3A%20int%29%3A%0A%20%20%20%20%22%22%22%D0%92%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20num%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%20index%20%D0%B2%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%22%22%22%0A%20%20%20%20%23%20%D0%A1%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8C%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D1%81%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%BE%D0%BC%20index%20%D0%B8%20%D0%B2%D1%81%D0%B5%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D1%83%D1%8E%D1%89%D0%B8%D0%B5%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%20%D0%BD%D0%B0%20%D0%BE%D0%B4%D0%BD%D1%83%20%D0%BF%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D1%8E%20%D0%BD%D0%B0%D0%B7%D0%B0%D0%B4%0A%20%20%20%20for%20i%20in%20range%28len%28nums%29%20-%201%2C%20index%2C%20-1%29%3A%0A%20%20%20%20%20%20%20%20nums%5Bi%5D%20%3D%20nums%5Bi%20-%201%5D%0A%20%20%20%20%23%20%D0%9F%D1%80%D0%B8%D1%81%D0%B2%D0%BE%D0%B8%D1%82%D1%8C%20num%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%83%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%20index%0A%20%20%20%20nums%5Bindex%5D%20%3D%20num%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%20%20%20%20print%28%22%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20nums%20%3D%22%2C%20nums%29%0A%0A%20%20%20%20%23%20%D0%92%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B0%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%0A%20%20%20%20insert%28nums%2C%206%2C%203%29%0A%20%20%20%20print%28%22%D0%9F%D0%BE%D1%81%D0%BB%D0%B5%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20%D1%87%D0%B8%D1%81%D0%BB%D0%B0%206%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%203%20nums%20%3D%22%2C%20nums%29&cumulative=false&curInstr=6&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false +https://pythontutor.com/render.html#code=def%20insert%28nums%3A%20list%5Bint%5D%2C%20num%3A%20int%2C%20index%3A%20int%29%3A%0A%20%20%20%20%22%22%22%D0%92%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B0%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20num%20%D0%B2%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%20index%22%22%22%0A%20%20%20%20%23%20%D0%A1%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8C%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D1%81%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%BE%D0%BC%20index%20%D0%B8%20%D0%B2%D1%81%D0%B5%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D1%83%D1%8E%D1%89%D0%B8%D0%B5%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%20%D0%BD%D0%B0%20%D0%BE%D0%B4%D0%BD%D1%83%20%D0%BF%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D1%8E%20%D0%B2%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%0A%20%20%20%20for%20i%20in%20range%28len%28nums%29%20-%201%2C%20index%2C%20-1%29%3A%0A%20%20%20%20%20%20%20%20nums%5Bi%5D%20%3D%20nums%5Bi%20-%201%5D%0A%20%20%20%20%23%20%D0%9F%D1%80%D0%B8%D1%81%D0%B2%D0%BE%D0%B8%D1%82%D1%8C%20num%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%83%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%20index%0A%20%20%20%20nums%5Bindex%5D%20%3D%20num%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%20%20%20%20print%28%22%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20nums%20%3D%22%2C%20nums%29%0A%0A%20%20%20%20%23%20%D0%92%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B0%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%0A%20%20%20%20insert%28nums%2C%206%2C%203%29%0A%20%20%20%20print%28%22%D0%9F%D0%BE%D1%81%D0%BB%D0%B5%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20%D1%87%D0%B8%D1%81%D0%BB%D0%B0%206%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%203%20nums%20%3D%22%2C%20nums%29&cumulative=false&curInstr=6&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false -https://pythontutor.com/render.html#code=def%20remove%28nums%3A%20list%5Bint%5D%2C%20index%3A%20int%29%3A%0A%20%20%20%20%22%22%22%D0%A3%D0%B4%D0%B0%D0%BB%D0%B8%D1%82%D1%8C%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%20index%22%22%22%0A%20%20%20%20%23%20%D0%A1%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8C%20%D0%B2%D1%81%D0%B5%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%B0%20index%20%D0%BD%D0%B0%20%D0%BE%D0%B4%D0%BD%D1%83%20%D0%BF%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D1%8E%20%D0%B2%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%0A%20%20%20%20for%20i%20in%20range%28index%2C%20len%28nums%29%20-%201%29%3A%0A%20%20%20%20%20%20%20%20nums%5Bi%5D%20%3D%20nums%5Bi%20%2B%201%5D%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%20%20%20%20print%28%22%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20nums%20%3D%22%2C%20nums%29%0A%0A%20%20%20%20%23%20%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%0A%20%20%20%20remove%28nums%2C%202%29%0A%20%20%20%20print%28%22%D0%9F%D0%BE%D1%81%D0%BB%D0%B5%20%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%202%20nums%20%3D%22%2C%20nums%29&cumulative=false&curInstr=6&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false +https://pythontutor.com/render.html#code=def%20remove%28nums%3A%20list%5Bint%5D%2C%20index%3A%20int%29%3A%0A%20%20%20%20%22%22%22%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%20index%22%22%22%0A%20%20%20%20%23%20%D0%A1%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8C%20%D0%B2%D1%81%D0%B5%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%B0%20index%20%D0%BD%D0%B0%20%D0%BE%D0%B4%D0%BD%D1%83%20%D0%BF%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D1%8E%20%D0%B2%D0%BB%D0%B5%D0%B2%D0%BE%0A%20%20%20%20for%20i%20in%20range%28index%2C%20len%28nums%29%20-%201%29%3A%0A%20%20%20%20%20%20%20%20nums%5Bi%5D%20%3D%20nums%5Bi%20%2B%201%5D%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%20%20%20%20print%28%22%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20nums%20%3D%22%2C%20nums%29%0A%0A%20%20%20%20%23%20%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%0A%20%20%20%20remove%28nums%2C%202%29%0A%20%20%20%20print%28%22%D0%9F%D0%BE%D1%81%D0%BB%D0%B5%20%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%202%20nums%20%3D%22%2C%20nums%29&cumulative=false&curInstr=6&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false https://pythontutor.com/render.html#code=def%20traverse%28nums%3A%20list%5Bint%5D%29%3A%0A%20%20%20%20%22%22%22%D0%9E%D0%B1%D1%85%D0%BE%D0%B4%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%22%22%22%0A%20%20%20%20count%20%3D%200%0A%20%20%20%20%23%20%D0%9E%D0%B1%D1%85%D0%BE%D0%B4%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%B0%D0%BC%0A%20%20%20%20for%20i%20in%20range%28len%28nums%29%29%3A%0A%20%20%20%20%20%20%20%20count%20%2B%3D%20nums%5Bi%5D%0A%20%20%20%20%23%20%D0%9D%D0%B5%D0%BF%D0%BE%D1%81%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%20%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%8C%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%0A%20%20%20%20for%20num%20in%20nums%3A%0A%20%20%20%20%20%20%20%20count%20%2B%3D%20num%0A%20%20%20%20%23%20%D0%9E%D0%B4%D0%BD%D0%BE%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%20%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%8C%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%8B%20%D0%B8%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%0A%20%20%20%20for%20i%2C%20num%20in%20enumerate%28nums%29%3A%0A%20%20%20%20%20%20%20%20count%20%2B%3D%20nums%5Bi%5D%0A%20%20%20%20%20%20%20%20count%20%2B%3D%20num%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%20%20%20%20print%28%22%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20nums%20%3D%22%2C%20nums%29%0A%0A%20%20%20%20%23%20%D0%9E%D0%B1%D1%85%D0%BE%D0%B4%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%0A%20%20%20%20traverse%28nums%29&cumulative=false&curInstr=6&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false -https://pythontutor.com/render.html#code=def%20find%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%9D%D0%B0%D0%B9%D1%82%D0%B8%20%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%B2%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B5%22%22%22%0A%20%20%20%20for%20i%20in%20range%28len%28nums%29%29%3A%0A%20%20%20%20%20%20%20%20if%20nums%5Bi%5D%20%3D%3D%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20i%0A%20%20%20%20return%20-1%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%20%20%20%20print%28%22%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20nums%20%3D%22%2C%20nums%29%0A%0A%20%20%20%20%23%20%D0%9F%D0%BE%D0%B8%D1%81%D0%BA%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%0A%20%20%20%20index%3A%20int%20%3D%20find%28nums%2C%203%29%0A%20%20%20%20print%28%22%D0%9F%D0%BE%D0%B8%D1%81%D0%BA%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%203%20%D0%B2%20nums%3A%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%3D%22%2C%20index%29&cumulative=false&curInstr=6&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false +https://pythontutor.com/render.html#code=def%20find%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%9F%D0%BE%D0%B8%D1%81%D0%BA%20%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%D0%B2%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B5%22%22%22%0A%20%20%20%20for%20i%20in%20range%28len%28nums%29%29%3A%0A%20%20%20%20%20%20%20%20if%20nums%5Bi%5D%20%3D%3D%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20i%0A%20%20%20%20return%20-1%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%20%20%20%20print%28%22%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20nums%20%3D%22%2C%20nums%29%0A%0A%20%20%20%20%23%20%D0%9F%D0%BE%D0%B8%D1%81%D0%BA%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%0A%20%20%20%20index%3A%20int%20%3D%20find%28nums%2C%203%29%0A%20%20%20%20print%28%22%D0%9F%D0%BE%D0%B8%D1%81%D0%BA%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%203%20%D0%B2%20nums%3A%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%3D%22%2C%20index%29&cumulative=false&curInstr=6&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false -https://pythontutor.com/render.html#code=%23%20%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%B8%D1%82%D0%B5%20%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D0%B5%3A%20list%20%D0%B2%20Python%20%E2%80%94%20%D1%8D%D1%82%D0%BE%20%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%2C%20%D0%B5%D0%B3%D0%BE%20%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%20%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D1%8F%D1%82%D1%8C%20%D0%BD%D0%B0%D0%BF%D1%80%D1%8F%D0%BC%D1%83%D1%8E%0A%23%20%D0%94%D0%BB%D1%8F%20%D1%83%D0%B4%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B0%20%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B2%20%D1%8D%D1%82%D0%BE%D0%B9%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8%20list%20%D1%80%D0%B0%D1%81%D1%81%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D0%B2%D0%B0%D0%B5%D1%82%D1%81%D1%8F%20%D0%BA%D0%B0%D0%BA%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20%D0%BD%D0%B5%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D1%8F%D0%B5%D0%BC%D0%BE%D0%B9%20%D0%B4%D0%BB%D0%B8%D0%BD%D1%8B%0Adef%20extend%28nums%3A%20list%5Bint%5D%2C%20enlarge%3A%20int%29%20-%3E%20list%5Bint%5D%3A%0A%20%20%20%20%22%22%22%D0%A3%D0%B2%D0%B5%D0%BB%D0%B8%D1%87%D0%B8%D1%82%D1%8C%20%D0%B4%D0%BB%D0%B8%D0%BD%D1%83%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%22%22%22%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20%D1%83%D0%B2%D0%B5%D0%BB%D0%B8%D1%87%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9%20%D0%B4%D0%BB%D0%B8%D0%BD%D1%8B%0A%20%20%20%20res%20%3D%20%5B0%5D%20%2A%20%28len%28nums%29%20%2B%20enlarge%29%0A%20%20%20%20%23%20%D0%A1%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B2%D1%81%D0%B5%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%20%D0%B8%D1%81%D1%85%D0%BE%D0%B4%D0%BD%D0%BE%D0%B3%D0%BE%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%20%D0%B2%20%D0%BD%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%0A%20%20%20%20for%20i%20in%20range%28len%28nums%29%29%3A%0A%20%20%20%20%20%20%20%20res%5Bi%5D%20%3D%20nums%5Bi%5D%0A%20%20%20%20%23%20%D0%92%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D0%BD%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D1%8F%0A%20%20%20%20return%20res%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%20%20%20%20print%28%22%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20nums%20%3D%22%2C%20nums%29%0A%0A%20%20%20%20%23%20%D0%A0%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B4%D0%BB%D0%B8%D0%BD%D1%8B%0A%20%20%20%20nums%20%3D%20extend%28nums%2C%203%29%0A%20%20%20%20print%28%22%D0%9F%D0%BE%D1%81%D0%BB%D0%B5%20%D1%83%D0%B2%D0%B5%D0%BB%D0%B8%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B4%D0%BB%D0%B8%D0%BD%D1%8B%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%20%D0%B4%D0%BE%208%20nums%20%3D%22%2C%20nums%29&cumulative=false&curInstr=6&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false +https://pythontutor.com/render.html#code=%23%20%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%B8%D1%82%D0%B5%20%D0%B2%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D0%B5%3A%20list%20%D0%B2%20Python%20%E2%80%94%20%D1%8D%D1%82%D0%BE%20%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%2C%20%D0%B5%D0%B3%D0%BE%20%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%20%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D1%8F%D1%82%D1%8C%20%D0%BD%D0%B0%D0%BF%D1%80%D1%8F%D0%BC%D1%83%D1%8E%0A%23%20%D0%94%D0%BB%D1%8F%20%D1%83%D0%B4%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B0%20%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B2%20%D1%8D%D1%82%D0%BE%D0%B9%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8%20list%20%D1%80%D0%B0%D1%81%D1%81%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D0%B2%D0%B0%D0%B5%D1%82%D1%81%D1%8F%20%D0%BA%D0%B0%D0%BA%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20%D0%BD%D0%B5%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D1%8F%D0%B5%D0%BC%D0%BE%D0%B9%20%D0%B4%D0%BB%D0%B8%D0%BD%D1%8B%0Adef%20extend%28nums%3A%20list%5Bint%5D%2C%20enlarge%3A%20int%29%20-%3E%20list%5Bint%5D%3A%0A%20%20%20%20%22%22%22%D0%A3%D0%B2%D0%B5%D0%BB%D0%B8%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B4%D0%BB%D0%B8%D0%BD%D1%8B%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%22%22%22%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20%D1%83%D0%B2%D0%B5%D0%BB%D0%B8%D1%87%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9%20%D0%B4%D0%BB%D0%B8%D0%BD%D1%8B%0A%20%20%20%20res%20%3D%20%5B0%5D%20%2A%20%28len%28nums%29%20%2B%20enlarge%29%0A%20%20%20%20%23%20%D0%A1%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B2%D1%81%D0%B5%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%20%D0%B8%D1%81%D1%85%D0%BE%D0%B4%D0%BD%D0%BE%D0%B3%D0%BE%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%20%D0%B2%20%D0%BD%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%0A%20%20%20%20for%20i%20in%20range%28len%28nums%29%29%3A%0A%20%20%20%20%20%20%20%20res%5Bi%5D%20%3D%20nums%5Bi%5D%0A%20%20%20%20%23%20%D0%92%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D0%BD%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D1%8F%0A%20%20%20%20return%20res%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%20%20%20%20print%28%22%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20nums%20%3D%22%2C%20nums%29%0A%0A%20%20%20%20%23%20%D0%A0%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B4%D0%BB%D0%B8%D0%BD%D1%8B%0A%20%20%20%20nums%20%3D%20extend%28nums%2C%203%29%0A%20%20%20%20print%28%22%D0%9F%D0%BE%D1%81%D0%BB%D0%B5%20%D1%83%D0%B2%D0%B5%D0%BB%D0%B8%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B4%D0%BB%D0%B8%D0%BD%D1%8B%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%20%D0%B4%D0%BE%208%20nums%20%3D%22%2C%20nums%29&cumulative=false&curInstr=6&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false diff --git a/ru/codes/pythontutor/chapter_array_and_linkedlist/linked_list.md b/ru/codes/pythontutor/chapter_array_and_linkedlist/linked_list.md index f70ba6c57..2a5a2d041 100644 --- a/ru/codes/pythontutor/chapter_array_and_linkedlist/linked_list.md +++ b/ru/codes/pythontutor/chapter_array_and_linkedlist/linked_list.md @@ -5,13 +5,13 @@ ---> -https://pythontutor.com/render.html#code=class%20ListNode%3A%0A%20%20%20%20%22%22%22%D0%9A%D0%BB%D0%B0%D1%81%D1%81%20%D1%83%D0%B7%D0%BB%D0%B0%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%22%22%22%0A%20%20%20%20def%20__init__%28self%2C%20val%3A%20int%29%3A%0A%20%20%20%20%20%20%20%20self.val%3A%20int%20%3D%20val%20%20%23%20%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%83%D0%B7%D0%BB%D0%B0%0A%20%20%20%20%20%20%20%20self.next%3A%20ListNode%20%7C%20None%20%3D%20None%20%20%23%20%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B0%20%D0%BD%D0%B0%20%D1%83%D0%B7%D0%B5%D0%BB-%D0%BF%D1%80%D0%B5%D0%B5%D0%BC%D0%BD%D0%B8%D0%BA%0A%0Adef%20insert%28n0%3A%20ListNode%2C%20P%3A%20ListNode%29%3A%0A%20%20%20%20%22%22%22%D0%92%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%D1%83%D0%B7%D0%B5%D0%BB%20P%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D1%83%D0%B7%D0%BB%D0%B0%20n0%20%D0%B2%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%BC%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B5%22%22%22%0A%20%20%20%20n1%20%3D%20n0.next%0A%20%20%20%20P.next%20%3D%20n1%0A%20%20%20%20n0.next%20%3D%20P%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B2%D1%81%D0%B5%D1%85%20%D1%83%D0%B7%D0%BB%D0%BE%D0%B2%0A%20%20%20%20n0%20%3D%20ListNode%281%29%0A%20%20%20%20n1%20%3D%20ListNode%283%29%0A%20%20%20%20n2%20%3D%20ListNode%282%29%0A%20%20%20%20n3%20%3D%20ListNode%285%29%0A%20%20%20%20n4%20%3D%20ListNode%284%29%0A%20%20%20%20%23%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C%20%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8%20%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%20%D1%83%D0%B7%D0%BB%D0%B0%D0%BC%D0%B8%0A%20%20%20%20n0.next%20%3D%20n1%0A%20%20%20%20n1.next%20%3D%20n2%0A%20%20%20%20n2.next%20%3D%20n3%0A%20%20%20%20n3.next%20%3D%20n4%0A%0A%20%20%20%20%23%20%D0%92%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B0%20%D1%83%D0%B7%D0%BB%D0%B0%0A%20%20%20%20p%20%3D%20ListNode%280%29%0A%20%20%20%20insert%28n0%2C%20p%29&cumulative=false&curInstr=39&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false +https://pythontutor.com/render.html#code=class%20ListNode%3A%0A%20%20%20%20%22%22%22%D0%9A%D0%BB%D0%B0%D1%81%D1%81%20%D1%83%D0%B7%D0%BB%D0%B0%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%22%22%22%0A%20%20%20%20def%20__init__%28self%2C%20val%3A%20int%29%3A%0A%20%20%20%20%20%20%20%20self.val%3A%20int%20%3D%20val%20%20%23%20%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%83%D0%B7%D0%BB%D0%B0%0A%20%20%20%20%20%20%20%20self.next%3A%20ListNode%20%7C%20None%20%3D%20None%20%20%23%20%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B0%20%D0%BD%D0%B0%20%D1%83%D0%B7%D0%B5%D0%BB-%D0%BF%D1%80%D0%B5%D0%B5%D0%BC%D0%BD%D0%B8%D0%BA%0A%0Adef%20insert%28n0%3A%20ListNode%2C%20P%3A%20ListNode%29%3A%0A%20%20%20%20%22%22%22%D0%92%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B0%20%D1%83%D0%B7%D0%BB%D0%B0%20P%20%D0%B2%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D1%8B%D0%B9%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D1%83%D0%B7%D0%BB%D0%B0%20n0%22%22%22%0A%20%20%20%20n1%20%3D%20n0.next%0A%20%20%20%20P.next%20%3D%20n1%0A%20%20%20%20n0.next%20%3D%20P%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B2%D1%81%D0%B5%D1%85%20%D1%83%D0%B7%D0%BB%D0%BE%D0%B2%0A%20%20%20%20n0%20%3D%20ListNode%281%29%0A%20%20%20%20n1%20%3D%20ListNode%283%29%0A%20%20%20%20n2%20%3D%20ListNode%282%29%0A%20%20%20%20n3%20%3D%20ListNode%285%29%0A%20%20%20%20n4%20%3D%20ListNode%284%29%0A%20%20%20%20%23%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C%20%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8%20%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%20%D1%83%D0%B7%D0%BB%D0%B0%D0%BC%D0%B8%0A%20%20%20%20n0.next%20%3D%20n1%0A%20%20%20%20n1.next%20%3D%20n2%0A%20%20%20%20n2.next%20%3D%20n3%0A%20%20%20%20n3.next%20%3D%20n4%0A%0A%20%20%20%20%23%20%D0%92%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B0%20%D1%83%D0%B7%D0%BB%D0%B0%0A%20%20%20%20p%20%3D%20ListNode%280%29%0A%20%20%20%20insert%28n0%2C%20p%29&cumulative=false&curInstr=39&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false -https://pythontutor.com/render.html#code=class%20ListNode%3A%0A%20%20%20%20%22%22%22%D0%9A%D0%BB%D0%B0%D1%81%D1%81%20%D1%83%D0%B7%D0%BB%D0%B0%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%22%22%22%0A%20%20%20%20def%20__init__%28self%2C%20val%3A%20int%29%3A%0A%20%20%20%20%20%20%20%20self.val%3A%20int%20%3D%20val%20%20%23%20%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%83%D0%B7%D0%BB%D0%B0%0A%20%20%20%20%20%20%20%20self.next%3A%20ListNode%20%7C%20None%20%3D%20None%20%20%23%20%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B0%20%D0%BD%D0%B0%20%D1%83%D0%B7%D0%B5%D0%BB-%D0%BF%D1%80%D0%B5%D0%B5%D0%BC%D0%BD%D0%B8%D0%BA%0A%0Adef%20remove%28n0%3A%20ListNode%29%3A%0A%20%20%20%20%22%22%22%D0%A3%D0%B4%D0%B0%D0%BB%D0%B8%D1%82%D1%8C%20%D0%BF%D0%B5%D1%80%D0%B2%D1%8B%D0%B9%20%D1%83%D0%B7%D0%B5%D0%BB%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D1%83%D0%B7%D0%BB%D0%B0%20n0%20%D0%B2%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%BC%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B5%22%22%22%0A%20%20%20%20if%20not%20n0.next%3A%0A%20%20%20%20%20%20%20%20return%0A%20%20%20%20%23%20n0%20-%3E%20P%20-%3E%20n1%0A%20%20%20%20P%20%3D%20n0.next%0A%20%20%20%20n1%20%3D%20P.next%0A%20%20%20%20n0.next%20%3D%20n1%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B2%D1%81%D0%B5%D1%85%20%D1%83%D0%B7%D0%BB%D0%BE%D0%B2%0A%20%20%20%20n0%20%3D%20ListNode%281%29%0A%20%20%20%20n1%20%3D%20ListNode%283%29%0A%20%20%20%20n2%20%3D%20ListNode%282%29%0A%20%20%20%20n3%20%3D%20ListNode%285%29%0A%20%20%20%20n4%20%3D%20ListNode%284%29%0A%20%20%20%20%23%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C%20%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8%20%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%20%D1%83%D0%B7%D0%BB%D0%B0%D0%BC%D0%B8%0A%20%20%20%20n0.next%20%3D%20n1%0A%20%20%20%20n1.next%20%3D%20n2%0A%20%20%20%20n2.next%20%3D%20n3%0A%20%20%20%20n3.next%20%3D%20n4%0A%0A%20%20%20%20%23%20%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%83%D0%B7%D0%BB%D0%B0%0A%20%20%20%20remove%28n0%29&cumulative=false&curInstr=34&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false +https://pythontutor.com/render.html#code=class%20ListNode%3A%0A%20%20%20%20%22%22%22%D0%9A%D0%BB%D0%B0%D1%81%D1%81%20%D1%83%D0%B7%D0%BB%D0%B0%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%22%22%22%0A%20%20%20%20def%20__init__%28self%2C%20val%3A%20int%29%3A%0A%20%20%20%20%20%20%20%20self.val%3A%20int%20%3D%20val%20%20%23%20%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%83%D0%B7%D0%BB%D0%B0%0A%20%20%20%20%20%20%20%20self.next%3A%20ListNode%20%7C%20None%20%3D%20None%20%20%23%20%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B0%20%D0%BD%D0%B0%20%D1%83%D0%B7%D0%B5%D0%BB-%D0%BF%D1%80%D0%B5%D0%B5%D0%BC%D0%BD%D0%B8%D0%BA%0A%0Adef%20remove%28n0%3A%20ListNode%29%3A%0A%20%20%20%20%22%22%22%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%B5%D1%80%D0%B2%D0%BE%D0%B3%D0%BE%20%D1%83%D0%B7%D0%BB%D0%B0%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D1%83%D0%B7%D0%BB%D0%B0%20n0%20%D0%B8%D0%B7%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%22%22%22%0A%20%20%20%20if%20not%20n0.next%3A%0A%20%20%20%20%20%20%20%20return%0A%20%20%20%20%23%20n0%20-%3E%20P%20-%3E%20n1%0A%20%20%20%20P%20%3D%20n0.next%0A%20%20%20%20n1%20%3D%20P.next%0A%20%20%20%20n0.next%20%3D%20n1%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B2%D1%81%D0%B5%D1%85%20%D1%83%D0%B7%D0%BB%D0%BE%D0%B2%0A%20%20%20%20n0%20%3D%20ListNode%281%29%0A%20%20%20%20n1%20%3D%20ListNode%283%29%0A%20%20%20%20n2%20%3D%20ListNode%282%29%0A%20%20%20%20n3%20%3D%20ListNode%285%29%0A%20%20%20%20n4%20%3D%20ListNode%284%29%0A%20%20%20%20%23%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C%20%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8%20%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%20%D1%83%D0%B7%D0%BB%D0%B0%D0%BC%D0%B8%0A%20%20%20%20n0.next%20%3D%20n1%0A%20%20%20%20n1.next%20%3D%20n2%0A%20%20%20%20n2.next%20%3D%20n3%0A%20%20%20%20n3.next%20%3D%20n4%0A%0A%20%20%20%20%23%20%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%83%D0%B7%D0%BB%D0%B0%0A%20%20%20%20remove%28n0%29&cumulative=false&curInstr=34&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false -https://pythontutor.com/render.html#code=class%20ListNode%3A%0A%20%20%20%20%22%22%22%D0%9A%D0%BB%D0%B0%D1%81%D1%81%20%D1%83%D0%B7%D0%BB%D0%B0%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%22%22%22%0A%20%20%20%20def%20__init__%28self%2C%20val%3A%20int%29%3A%0A%20%20%20%20%20%20%20%20self.val%3A%20int%20%3D%20val%20%20%23%20%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%83%D0%B7%D0%BB%D0%B0%0A%20%20%20%20%20%20%20%20self.next%3A%20ListNode%20%7C%20None%20%3D%20None%20%20%23%20%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B0%20%D0%BD%D0%B0%20%D1%83%D0%B7%D0%B5%D0%BB-%D0%BF%D1%80%D0%B5%D0%B5%D0%BC%D0%BD%D0%B8%D0%BA%0A%0Adef%20access%28head%3A%20ListNode%2C%20index%3A%20int%29%20-%3E%20ListNode%20%7C%20None%3A%0A%20%20%20%20%22%22%22%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF%20%D0%BA%20%D1%83%D0%B7%D0%BB%D1%83%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%20index%22%22%22%0A%20%20%20%20for%20_%20in%20range%28index%29%3A%0A%20%20%20%20%20%20%20%20if%20not%20head%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20None%0A%20%20%20%20%20%20%20%20head%20%3D%20head.next%0A%20%20%20%20return%20head%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B2%D1%81%D0%B5%D1%85%20%D1%83%D0%B7%D0%BB%D0%BE%D0%B2%0A%20%20%20%20n0%20%3D%20ListNode%281%29%0A%20%20%20%20n1%20%3D%20ListNode%283%29%0A%20%20%20%20n2%20%3D%20ListNode%282%29%0A%20%20%20%20n3%20%3D%20ListNode%285%29%0A%20%20%20%20n4%20%3D%20ListNode%284%29%0A%20%20%20%20%23%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C%20%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8%20%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%20%D1%83%D0%B7%D0%BB%D0%B0%D0%BC%D0%B8%0A%20%20%20%20n0.next%20%3D%20n1%0A%20%20%20%20n1.next%20%3D%20n2%0A%20%20%20%20n2.next%20%3D%20n3%0A%20%20%20%20n3.next%20%3D%20n4%0A%0A%20%20%20%20%23%20%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF%20%D0%BA%20%D1%83%D0%B7%D0%BB%D1%83%0A%20%20%20%20node%20%3D%20access%28n0%2C%203%29%0A%20%20%20%20print%28%22%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%83%D0%B7%D0%BB%D0%B0%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%203%20%D0%B2%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%BC%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B5%20%3D%20%7B%7D%22.format%28node.val%29%29&cumulative=false&curInstr=34&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false +https://pythontutor.com/render.html#code=class%20ListNode%3A%0A%20%20%20%20%22%22%22%D0%9A%D0%BB%D0%B0%D1%81%D1%81%20%D1%83%D0%B7%D0%BB%D0%B0%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%22%22%22%0A%20%20%20%20def%20__init__%28self%2C%20val%3A%20int%29%3A%0A%20%20%20%20%20%20%20%20self.val%3A%20int%20%3D%20val%20%20%23%20%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%83%D0%B7%D0%BB%D0%B0%0A%20%20%20%20%20%20%20%20self.next%3A%20ListNode%20%7C%20None%20%3D%20None%20%20%23%20%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B0%20%D0%BD%D0%B0%20%D1%83%D0%B7%D0%B5%D0%BB-%D0%BF%D1%80%D0%B5%D0%B5%D0%BC%D0%BD%D0%B8%D0%BA%0A%0Adef%20access%28head%3A%20ListNode%2C%20index%3A%20int%29%20-%3E%20ListNode%20%7C%20None%3A%0A%20%20%20%20%22%22%22%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF%20%D0%BA%20%D1%83%D0%B7%D0%BB%D1%83%20%D1%81%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%BE%D0%BC%20index%20%D0%B2%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%BC%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B5%22%22%22%0A%20%20%20%20for%20_%20in%20range%28index%29%3A%0A%20%20%20%20%20%20%20%20if%20not%20head%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20None%0A%20%20%20%20%20%20%20%20head%20%3D%20head.next%0A%20%20%20%20return%20head%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B2%D1%81%D0%B5%D1%85%20%D1%83%D0%B7%D0%BB%D0%BE%D0%B2%0A%20%20%20%20n0%20%3D%20ListNode%281%29%0A%20%20%20%20n1%20%3D%20ListNode%283%29%0A%20%20%20%20n2%20%3D%20ListNode%282%29%0A%20%20%20%20n3%20%3D%20ListNode%285%29%0A%20%20%20%20n4%20%3D%20ListNode%284%29%0A%20%20%20%20%23%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C%20%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8%20%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%20%D1%83%D0%B7%D0%BB%D0%B0%D0%BC%D0%B8%0A%20%20%20%20n0.next%20%3D%20n1%0A%20%20%20%20n1.next%20%3D%20n2%0A%20%20%20%20n2.next%20%3D%20n3%0A%20%20%20%20n3.next%20%3D%20n4%0A%0A%20%20%20%20%23%20%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF%20%D0%BA%20%D1%83%D0%B7%D0%BB%D1%83%0A%20%20%20%20node%20%3D%20access%28n0%2C%203%29%0A%20%20%20%20print%28%22%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%83%D0%B7%D0%BB%D0%B0%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%203%20%D0%B2%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%BC%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B5%20%3D%20%7B%7D%22.format%28node.val%29%29&cumulative=false&curInstr=34&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false -https://pythontutor.com/render.html#code=class%20ListNode%3A%0A%20%20%20%20%22%22%22%D0%9A%D0%BB%D0%B0%D1%81%D1%81%20%D1%83%D0%B7%D0%BB%D0%B0%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%22%22%22%0A%20%20%20%20def%20__init__%28self%2C%20val%3A%20int%29%3A%0A%20%20%20%20%20%20%20%20self.val%3A%20int%20%3D%20val%20%20%23%20%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%83%D0%B7%D0%BB%D0%B0%0A%20%20%20%20%20%20%20%20self.next%3A%20ListNode%20%7C%20None%20%3D%20None%20%20%23%20%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B0%20%D0%BD%D0%B0%20%D1%83%D0%B7%D0%B5%D0%BB-%D0%BF%D1%80%D0%B5%D0%B5%D0%BC%D0%BD%D0%B8%D0%BA%0A%0Adef%20find%28head%3A%20ListNode%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%9D%D0%B0%D0%B9%D1%82%D0%B8%20%D0%B2%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%BC%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B5%20%D0%BF%D0%B5%D1%80%D0%B2%D1%8B%D0%B9%20%D1%83%D0%B7%D0%B5%D0%BB%20%D1%81%D0%BE%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC%20target%22%22%22%0A%20%20%20%20index%20%3D%200%0A%20%20%20%20while%20head%3A%0A%20%20%20%20%20%20%20%20if%20head.val%20%3D%3D%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20index%0A%20%20%20%20%20%20%20%20head%20%3D%20head.next%0A%20%20%20%20%20%20%20%20index%20%2B%3D%201%0A%20%20%20%20return%20-1%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B2%D1%81%D0%B5%D1%85%20%D1%83%D0%B7%D0%BB%D0%BE%D0%B2%0A%20%20%20%20n0%20%3D%20ListNode%281%29%0A%20%20%20%20n1%20%3D%20ListNode%283%29%0A%20%20%20%20n2%20%3D%20ListNode%282%29%0A%20%20%20%20n3%20%3D%20ListNode%285%29%0A%20%20%20%20n4%20%3D%20ListNode%284%29%0A%20%20%20%20%23%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C%20%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8%20%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%20%D1%83%D0%B7%D0%BB%D0%B0%D0%BC%D0%B8%0A%20%20%20%20n0.next%20%3D%20n1%0A%20%20%20%20n1.next%20%3D%20n2%0A%20%20%20%20n2.next%20%3D%20n3%0A%20%20%20%20n3.next%20%3D%20n4%0A%0A%20%20%20%20%23%20%D0%9F%D0%BE%D0%B8%D1%81%D0%BA%20%D1%83%D0%B7%D0%BB%D0%B0%0A%20%20%20%20index%20%3D%20find%28n0%2C%202%29%0A%20%20%20%20print%28%22%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%83%D0%B7%D0%BB%D0%B0%20%D1%81%D0%BE%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC%202%20%D0%B2%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%BC%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B5%20%3D%20%7B%7D%22.format%28index%29%29&cumulative=false&curInstr=34&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false +https://pythontutor.com/render.html#code=class%20ListNode%3A%0A%20%20%20%20%22%22%22%D0%9A%D0%BB%D0%B0%D1%81%D1%81%20%D1%83%D0%B7%D0%BB%D0%B0%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%22%22%22%0A%20%20%20%20def%20__init__%28self%2C%20val%3A%20int%29%3A%0A%20%20%20%20%20%20%20%20self.val%3A%20int%20%3D%20val%20%20%23%20%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%83%D0%B7%D0%BB%D0%B0%0A%20%20%20%20%20%20%20%20self.next%3A%20ListNode%20%7C%20None%20%3D%20None%20%20%23%20%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B0%20%D0%BD%D0%B0%20%D1%83%D0%B7%D0%B5%D0%BB-%D0%BF%D1%80%D0%B5%D0%B5%D0%BC%D0%BD%D0%B8%D0%BA%0A%0Adef%20find%28head%3A%20ListNode%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%9F%D0%BE%D0%B8%D1%81%D0%BA%20%D0%BF%D0%B5%D1%80%D0%B2%D0%BE%D0%B3%D0%BE%20%D1%83%D0%B7%D0%BB%D0%B0%20%D1%81%D0%BE%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC%20target%20%D0%B2%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%BC%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B5%22%22%22%0A%20%20%20%20index%20%3D%200%0A%20%20%20%20while%20head%3A%0A%20%20%20%20%20%20%20%20if%20head.val%20%3D%3D%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20index%0A%20%20%20%20%20%20%20%20head%20%3D%20head.next%0A%20%20%20%20%20%20%20%20index%20%2B%3D%201%0A%20%20%20%20return%20-1%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B2%D1%81%D0%B5%D1%85%20%D1%83%D0%B7%D0%BB%D0%BE%D0%B2%0A%20%20%20%20n0%20%3D%20ListNode%281%29%0A%20%20%20%20n1%20%3D%20ListNode%283%29%0A%20%20%20%20n2%20%3D%20ListNode%282%29%0A%20%20%20%20n3%20%3D%20ListNode%285%29%0A%20%20%20%20n4%20%3D%20ListNode%284%29%0A%20%20%20%20%23%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C%20%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8%20%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%20%D1%83%D0%B7%D0%BB%D0%B0%D0%BC%D0%B8%0A%20%20%20%20n0.next%20%3D%20n1%0A%20%20%20%20n1.next%20%3D%20n2%0A%20%20%20%20n2.next%20%3D%20n3%0A%20%20%20%20n3.next%20%3D%20n4%0A%0A%20%20%20%20%23%20%D0%9F%D0%BE%D0%B8%D1%81%D0%BA%20%D1%83%D0%B7%D0%BB%D0%B0%0A%20%20%20%20index%20%3D%20find%28n0%2C%202%29%0A%20%20%20%20print%28%22%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%83%D0%B7%D0%BB%D0%B0%20%D1%81%D0%BE%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC%202%20%D0%B2%20%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D0%BC%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B5%20%3D%20%7B%7D%22.format%28index%29%29&cumulative=false&curInstr=34&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false diff --git a/ru/codes/pythontutor/chapter_divide_and_conquer/binary_search_recur.md b/ru/codes/pythontutor/chapter_divide_and_conquer/binary_search_recur.md index 0853e0800..04a1831b3 100644 --- a/ru/codes/pythontutor/chapter_divide_and_conquer/binary_search_recur.md +++ b/ru/codes/pythontutor/chapter_divide_and_conquer/binary_search_recur.md @@ -5,4 +5,4 @@ ---> -https://pythontutor.com/render.html#code=def%20dfs%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%2C%20i%3A%20int%2C%20j%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%3A%20%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0%20f%28i%2C%20j%29%22%22%22%0A%20%20%20%20%23%20%D0%95%D1%81%D0%BB%D0%B8%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%20%D0%BF%D1%83%D1%81%D1%82%2C%20%D1%86%D0%B5%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BE%D1%82%D1%81%D1%83%D1%82%D1%81%D1%82%D0%B2%D1%83%D0%B5%D1%82%2C%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20-1%0A%20%20%20%20if%20i%20%3E%20j%3A%0A%20%20%20%20%20%20%20%20return%20-1%0A%20%20%20%20%23%20%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D1%8C%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%81%D0%B5%D1%80%D0%B5%D0%B4%D0%B8%D0%BD%D1%8B%20m%0A%20%20%20%20m%20%3D%20%28i%20%2B%20j%29%20%2F%2F%202%0A%20%20%20%20if%20nums%5Bm%5D%20%3C%20target%3A%0A%20%20%20%20%20%20%20%20%23%20%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%BE%D0%B4%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0%20f%28m%2B1%2C%20j%29%0A%20%20%20%20%20%20%20%20return%20dfs%28nums%2C%20target%2C%20m%20%2B%201%2C%20j%29%0A%20%20%20%20elif%20nums%5Bm%5D%20%3E%20target%3A%0A%20%20%20%20%20%20%20%20%23%20%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%BE%D0%B4%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0%20f%28i%2C%20m-1%29%0A%20%20%20%20%20%20%20%20return%20dfs%28nums%2C%20target%2C%20i%2C%20m%20-%201%29%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%23%20%D0%A6%D0%B5%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%2C%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D0%B5%D0%B3%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%0A%20%20%20%20%20%20%20%20return%20m%0A%0Adef%20binary_search%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%22%22%22%0A%20%20%20%20n%20%3D%20len%28nums%29%0A%20%20%20%20%23%20%D0%A0%D0%B5%D1%88%D0%B8%D1%82%D1%8C%20%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D1%83%20f%280%2C%20n-1%29%0A%20%20%20%20return%20dfs%28nums%2C%20target%2C%200%2C%20n%20-%201%29%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20target%20%3D%206%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%206%2C%208%2C%2012%2C%2015%2C%2023%2C%2026%2C%2031%2C%2035%5D%0A%0A%20%20%20%20%23%20%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%28%D0%B4%D0%B2%D1%83%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B5%20%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%29%0A%20%20%20%20index%20%3D%20binary_search%28nums%2C%20target%29%0A%20%20%20%20print%28%22%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%86%D0%B5%D0%BB%D0%B5%D0%B2%D0%BE%D0%B3%D0%BE%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%206%20%3D%20%22%2C%20index%29&cumulative=false&curInstr=6&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false +https://pythontutor.com/render.html#code=def%20dfs%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%2C%20i%3A%20int%2C%20j%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%3A%20%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0%20f%28i%2C%20j%29%22%22%22%0A%20%20%20%20%23%20%D0%95%D1%81%D0%BB%D0%B8%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%20%D0%BF%D1%83%D1%81%D1%82%2C%20%D1%86%D0%B5%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BE%D1%82%D1%81%D1%83%D1%82%D1%81%D1%82%D0%B2%D1%83%D0%B5%D1%82%2C%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20-1%0A%20%20%20%20if%20i%20%3E%20j%3A%0A%20%20%20%20%20%20%20%20return%20-1%0A%20%20%20%20%23%20%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D1%8C%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%81%D0%B5%D1%80%D0%B5%D0%B4%D0%B8%D0%BD%D1%8B%20m%0A%20%20%20%20m%20%3D%20%28i%20%2B%20j%29%20%2F%2F%202%0A%20%20%20%20if%20nums%5Bm%5D%20%3C%20target%3A%0A%20%20%20%20%20%20%20%20%23%20%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%BE%D0%B4%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0%20f%28m%2B1%2C%20j%29%0A%20%20%20%20%20%20%20%20return%20dfs%28nums%2C%20target%2C%20m%20%2B%201%2C%20j%29%0A%20%20%20%20elif%20nums%5Bm%5D%20%3E%20target%3A%0A%20%20%20%20%20%20%20%20%23%20%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%BE%D0%B4%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0%20f%28i%2C%20m-1%29%0A%20%20%20%20%20%20%20%20return%20dfs%28nums%2C%20target%2C%20i%2C%20m%20-%201%29%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%23%20%D0%A6%D0%B5%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%2C%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D0%B5%D0%B3%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%0A%20%20%20%20%20%20%20%20return%20m%0A%0Adef%20binary_search%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%22%22%22%0A%20%20%20%20n%20%3D%20len%28nums%29%0A%20%20%20%20%23%20%D0%A0%D0%B5%D1%88%D0%B8%D1%82%D1%8C%20%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D1%83%20f%280%2C%20n-1%29%0A%20%20%20%20return%20dfs%28nums%2C%20target%2C%200%2C%20n%20-%201%29%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20target%20%3D%206%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%206%2C%208%2C%2012%2C%2015%2C%2023%2C%2026%2C%2031%2C%2035%5D%0A%0A%20%20%20%20%23%20%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%28%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%29%0A%20%20%20%20index%20%3D%20binary_search%28nums%2C%20target%29%0A%20%20%20%20print%28%22%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%86%D0%B5%D0%BB%D0%B5%D0%B2%D0%BE%D0%B3%D0%BE%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%206%20%3D%20%22%2C%20index%29&cumulative=false&curInstr=6&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false diff --git a/ru/codes/pythontutor/chapter_searching/binary_search.md b/ru/codes/pythontutor/chapter_searching/binary_search.md index bf47eae34..7fb3ca8c7 100644 --- a/ru/codes/pythontutor/chapter_searching/binary_search.md +++ b/ru/codes/pythontutor/chapter_searching/binary_search.md @@ -5,7 +5,7 @@ ---> -https://pythontutor.com/render.html#code=def%20binary_search%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%28%D0%B4%D0%B2%D1%83%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B5%20%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%29%22%22%22%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B4%D0%B2%D1%83%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B5%20%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%20%5B0%2C%20n-1%5D%2C%20%D1%82%D0%BE%20%D0%B5%D1%81%D1%82%D1%8C%20i%20%D0%B8%20j%20%D1%83%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D1%8E%D1%82%20%D0%BD%D0%B0%20%D0%BF%D0%B5%D1%80%D0%B2%D1%8B%D0%B9%20%D0%B8%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BD%D0%B8%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%20%D1%81%D0%BE%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%0A%20%20%20%20i%2C%20j%20%3D%200%2C%20len%28nums%29%20-%201%0A%20%20%20%20%23%20%D0%A6%D0%B8%D0%BA%D0%BB%20%D0%B7%D0%B0%D0%B2%D0%B5%D1%80%D1%88%D0%B0%D0%B5%D1%82%D1%81%D1%8F%2C%20%D0%BA%D0%BE%D0%B3%D0%B4%D0%B0%20%D0%B4%D0%B8%D0%B0%D0%BF%D0%B0%D0%B7%D0%BE%D0%BD%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0%20%D0%BF%D1%83%D1%81%D1%82%20%28%D0%BF%D1%80%D0%B8%20i%20%3E%20j%20%D0%B4%D0%B8%D0%B0%D0%BF%D0%B0%D0%B7%D0%BE%D0%BD%20%D0%BF%D1%83%D1%81%D1%82%29%0A%20%20%20%20while%20i%20%3C%3D%20j%3A%0A%20%20%20%20%20%20%20%20%23%20%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%20%D1%87%D0%B8%D1%81%D0%BB%D0%B0%20%D0%B2%20Python%20%D0%BC%D0%BE%D0%B3%D1%83%D1%82%20%D0%B1%D1%8B%D1%82%D1%8C%20%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%20%D1%83%D0%B3%D0%BE%D0%B4%D0%BD%D0%BE%20%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%BC%D0%B8%20%28%D0%BE%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D0%BD%D1%8B%20%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D0%BE%D0%B1%D1%8A%D0%B5%D0%BC%D0%BE%D0%BC%20%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8%29%2C%20%D0%BF%D0%BE%D1%8D%D1%82%D0%BE%D0%BC%D1%83%20%D0%BD%D0%B5%20%D0%BD%D1%83%D0%B6%D0%BD%D0%BE%20%D1%83%D1%87%D0%B8%D1%82%D1%8B%D0%B2%D0%B0%D1%82%D1%8C%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85%20%D1%87%D0%B8%D1%81%D0%B5%D0%BB%0A%20%20%20%20%20%20%20%20m%20%3D%20%28i%20%2B%20j%29%20%2F%2F%202%20%20%23%20%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D1%8C%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%81%D0%B5%D1%80%D0%B5%D0%B4%D0%B8%D0%BD%D1%8B%20m%0A%20%20%20%20%20%20%20%20if%20nums%5Bm%5D%20%3C%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20i%20%3D%20m%20%2B%201%20%20%23%20%D0%AD%D1%82%D0%BE%20%D0%BE%D0%B7%D0%BD%D0%B0%D1%87%D0%B0%D0%B5%D1%82%2C%20%D1%87%D1%82%D0%BE%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bm%2B1%2C%20j%5D%0A%20%20%20%20%20%20%20%20elif%20nums%5Bm%5D%20%3E%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20j%20%3D%20m%20-%201%20%20%23%20%D0%AD%D1%82%D0%BE%20%D0%BE%D0%B7%D0%BD%D0%B0%D1%87%D0%B0%D0%B5%D1%82%2C%20%D1%87%D1%82%D0%BE%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bi%2C%20m-1%5D%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20m%20%20%23%20%D0%A6%D0%B5%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%2C%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D0%B5%D0%B3%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%0A%20%20%20%20return%20-1%20%20%23%20%D0%A6%D0%B5%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BD%D0%B5%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%2C%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20-1%0A%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20target%20%3D%206%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%206%2C%208%2C%2012%2C%2015%2C%2023%2C%2026%2C%2031%2C%2035%5D%0A%0A%20%20%20%20%23%20%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%28%D0%B4%D0%B2%D1%83%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B5%20%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%29%0A%20%20%20%20index%20%3D%20binary_search%28nums%2C%20target%29%0A%20%20%20%20print%28%22%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%86%D0%B5%D0%BB%D0%B5%D0%B2%D0%BE%D0%B3%D0%BE%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%206%20%3D%20%22%2C%20index%29&cumulative=false&curInstr=5&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false +https://pythontutor.com/render.html#code=def%20binary_search%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%28%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%29%22%22%22%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%20%5B0%2C%20n-1%5D%2C%20%D1%82%D0%BE%20%D0%B5%D1%81%D1%82%D1%8C%20i%20%D0%B8%20j%20%D1%83%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D1%8E%D1%82%20%D0%BD%D0%B0%20%D0%BF%D0%B5%D1%80%D0%B2%D1%8B%D0%B9%20%D0%B8%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BD%D0%B8%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%20%D1%81%D0%BE%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%0A%20%20%20%20i%2C%20j%20%3D%200%2C%20len%28nums%29%20-%201%0A%20%20%20%20%23%20%D0%A6%D0%B8%D0%BA%D0%BB%20%D0%B7%D0%B0%D0%B2%D0%B5%D1%80%D1%88%D0%B0%D0%B5%D1%82%D1%81%D1%8F%2C%20%D0%BA%D0%BE%D0%B3%D0%B4%D0%B0%20%D0%B4%D0%B8%D0%B0%D0%BF%D0%B0%D0%B7%D0%BE%D0%BD%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0%20%D0%BF%D1%83%D1%81%D1%82%20%28%D0%BF%D1%80%D0%B8%20i%20%3E%20j%20%D0%B4%D0%B8%D0%B0%D0%BF%D0%B0%D0%B7%D0%BE%D0%BD%20%D0%BF%D1%83%D1%81%D1%82%29%0A%20%20%20%20while%20i%20%3C%3D%20j%3A%0A%20%20%20%20%20%20%20%20%23%20%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%20%D1%87%D0%B8%D1%81%D0%BB%D0%B0%20%D0%B2%20Python%20%D0%BC%D0%BE%D0%B3%D1%83%D1%82%20%D0%B1%D1%8B%D1%82%D1%8C%20%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%20%D1%83%D0%B3%D0%BE%D0%B4%D0%BD%D0%BE%20%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%BC%D0%B8%20%28%D0%BE%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D0%BD%D1%8B%20%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D0%BE%D0%B1%D1%8A%D0%B5%D0%BC%D0%BE%D0%BC%20%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8%29%2C%20%D0%BF%D0%BE%D1%8D%D1%82%D0%BE%D0%BC%D1%83%20%D0%BD%D0%B5%20%D0%BD%D1%83%D0%B6%D0%BD%D0%BE%20%D1%83%D1%87%D0%B8%D1%82%D1%8B%D0%B2%D0%B0%D1%82%D1%8C%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85%20%D1%87%D0%B8%D1%81%D0%B5%D0%BB%0A%20%20%20%20%20%20%20%20m%20%3D%20%28i%20%2B%20j%29%20%2F%2F%202%20%20%23%20%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D1%8C%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%81%D0%B5%D1%80%D0%B5%D0%B4%D0%B8%D0%BD%D1%8B%20m%0A%20%20%20%20%20%20%20%20if%20nums%5Bm%5D%20%3C%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20i%20%3D%20m%20%2B%201%20%20%23%20%D0%AD%D1%82%D0%BE%20%D0%BE%D0%B7%D0%BD%D0%B0%D1%87%D0%B0%D0%B5%D1%82%2C%20%D1%87%D1%82%D0%BE%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bm%2B1%2C%20j%5D%0A%20%20%20%20%20%20%20%20elif%20nums%5Bm%5D%20%3E%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20j%20%3D%20m%20-%201%20%20%23%20%D0%AD%D1%82%D0%BE%20%D0%BE%D0%B7%D0%BD%D0%B0%D1%87%D0%B0%D0%B5%D1%82%2C%20%D1%87%D1%82%D0%BE%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bi%2C%20m-1%5D%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20m%20%20%23%20%D0%A6%D0%B5%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%2C%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D0%B5%D0%B3%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%0A%20%20%20%20return%20-1%20%20%23%20%D0%A6%D0%B5%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BD%D0%B5%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%2C%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20-1%0A%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20target%20%3D%206%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%206%2C%208%2C%2012%2C%2015%2C%2023%2C%2026%2C%2031%2C%2035%5D%0A%0A%20%20%20%20%23%20%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%28%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%29%0A%20%20%20%20index%20%3D%20binary_search%28nums%2C%20target%29%0A%20%20%20%20print%28%22%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%86%D0%B5%D0%BB%D0%B5%D0%B2%D0%BE%D0%B3%D0%BE%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%206%20%3D%20%22%2C%20index%29&cumulative=false&curInstr=5&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false -https://pythontutor.com/render.html#code=def%20binary_search_lcro%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%28%D0%BB%D0%B5%D0%B2%D0%BE%20%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%2C%20%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%20%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%29%22%22%22%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%BB%D0%B5%D0%B2%D0%BE%20%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%2C%20%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%20%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%20%5B0%2C%20n%29%2C%20%D1%82%D0%BE%20%D0%B5%D1%81%D1%82%D1%8C%20i%20%D0%B8%20j%20%D1%83%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D1%8E%D1%82%20%D0%BD%D0%B0%20%D0%BF%D0%B5%D1%80%D0%B2%D1%8B%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%20%D0%B8%20%D0%BF%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D1%8E%20%D1%81%D1%80%D0%B0%D0%B7%D1%83%20%D0%B7%D0%B0%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BD%D0%B8%D0%BC%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%BC%20%D1%81%D0%BE%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%0A%20%20%20%20i%2C%20j%20%3D%200%2C%20len%28nums%29%0A%20%20%20%20%23%20%D0%A6%D0%B8%D0%BA%D0%BB%20%D0%B7%D0%B0%D0%B2%D0%B5%D1%80%D1%88%D0%B0%D0%B5%D1%82%D1%81%D1%8F%2C%20%D0%BA%D0%BE%D0%B3%D0%B4%D0%B0%20%D0%B4%D0%B8%D0%B0%D0%BF%D0%B0%D0%B7%D0%BE%D0%BD%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0%20%D0%BF%D1%83%D1%81%D1%82%20%28%D0%BF%D1%80%D0%B8%20i%20%3D%20j%20%D0%B4%D0%B8%D0%B0%D0%BF%D0%B0%D0%B7%D0%BE%D0%BD%20%D0%BF%D1%83%D1%81%D1%82%29%0A%20%20%20%20while%20i%20%3C%20j%3A%0A%20%20%20%20%20%20%20%20m%20%3D%20%28i%20%2B%20j%29%20%2F%2F%202%20%20%23%20%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D1%8C%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%81%D0%B5%D1%80%D0%B5%D0%B4%D0%B8%D0%BD%D1%8B%20m%0A%20%20%20%20%20%20%20%20if%20nums%5Bm%5D%20%3C%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20i%20%3D%20m%20%2B%201%20%20%23%20%D0%AD%D1%82%D0%BE%20%D0%BE%D0%B7%D0%BD%D0%B0%D1%87%D0%B0%D0%B5%D1%82%2C%20%D1%87%D1%82%D0%BE%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bm%2B1%2C%20j%29%0A%20%20%20%20%20%20%20%20elif%20nums%5Bm%5D%20%3E%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20j%20%3D%20m%20%20%23%20%D0%AD%D1%82%D0%BE%20%D0%BE%D0%B7%D0%BD%D0%B0%D1%87%D0%B0%D0%B5%D1%82%2C%20%D1%87%D1%82%D0%BE%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bi%2C%20m%29%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20m%20%20%23%20%D0%A6%D0%B5%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%2C%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D0%B5%D0%B3%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%0A%20%20%20%20return%20-1%20%20%23%20%D0%A6%D0%B5%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BD%D0%B5%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%2C%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20-1%0A%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20target%20%3D%206%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%206%2C%208%2C%2012%2C%2015%2C%2023%2C%2026%2C%2031%2C%2035%5D%0A%0A%20%20%20%20%23%20%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%28%D0%BB%D0%B5%D0%B2%D0%BE%20%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%2C%20%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%20%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%29%0A%20%20%20%20index%20%3D%20binary_search_lcro%28nums%2C%20target%29%0A%20%20%20%20print%28%22%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%86%D0%B5%D0%BB%D0%B5%D0%B2%D0%BE%D0%B3%D0%BE%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%206%20%3D%20%22%2C%20index%29&cumulative=false&curInstr=5&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false +https://pythontutor.com/render.html#code=def%20binary_search_lcro%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%28%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%2C%20%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%20%D1%81%D0%BB%D0%B5%D0%B2%D0%B0%20%D0%B8%20%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B9%20%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B0%29%22%22%22%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B0%20%5B0%2C%20n%29%2C%20%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BB%D0%B5%D0%B2%D0%B0%20%D0%B8%20%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B0%3A%20i%20%D1%83%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D0%B5%D1%82%20%D0%BD%D0%B0%20%D0%BF%D0%B5%D1%80%D0%B2%D1%8B%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0%2C%20%D0%B0%20j%20%E2%80%94%20%D0%BD%D0%B0%20%D0%BF%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D1%8E%20%D1%81%D1%80%D0%B0%D0%B7%D1%83%20%D0%B7%D0%B0%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BD%D0%B8%D0%BC%0A%20%20%20%20i%2C%20j%20%3D%200%2C%20len%28nums%29%0A%20%20%20%20%23%20%D0%A6%D0%B8%D0%BA%D0%BB%20%D0%B7%D0%B0%D0%B2%D0%B5%D1%80%D1%88%D0%B0%D0%B5%D1%82%D1%81%D1%8F%2C%20%D0%BA%D0%BE%D0%B3%D0%B4%D0%B0%20%D0%B4%D0%B8%D0%B0%D0%BF%D0%B0%D0%B7%D0%BE%D0%BD%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0%20%D0%BF%D1%83%D1%81%D1%82%20%28%D0%BF%D1%80%D0%B8%20i%20%3D%20j%20%D0%B4%D0%B8%D0%B0%D0%BF%D0%B0%D0%B7%D0%BE%D0%BD%20%D0%BF%D1%83%D1%81%D1%82%29%0A%20%20%20%20while%20i%20%3C%20j%3A%0A%20%20%20%20%20%20%20%20m%20%3D%20%28i%20%2B%20j%29%20%2F%2F%202%20%20%23%20%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D1%8C%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%81%D0%B5%D1%80%D0%B5%D0%B4%D0%B8%D0%BD%D1%8B%20m%0A%20%20%20%20%20%20%20%20if%20nums%5Bm%5D%20%3C%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20i%20%3D%20m%20%2B%201%20%20%23%20%D0%AD%D1%82%D0%BE%20%D0%BE%D0%B7%D0%BD%D0%B0%D1%87%D0%B0%D0%B5%D1%82%2C%20%D1%87%D1%82%D0%BE%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bm%2B1%2C%20j%29%0A%20%20%20%20%20%20%20%20elif%20nums%5Bm%5D%20%3E%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20j%20%3D%20m%20%20%23%20%D0%AD%D1%82%D0%BE%20%D0%BE%D0%B7%D0%BD%D0%B0%D1%87%D0%B0%D0%B5%D1%82%2C%20%D1%87%D1%82%D0%BE%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bi%2C%20m%29%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20m%20%20%23%20%D0%A6%D0%B5%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%2C%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D0%B5%D0%B3%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%0A%20%20%20%20return%20-1%20%20%23%20%D0%A6%D0%B5%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BD%D0%B5%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%2C%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20-1%0A%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20target%20%3D%206%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%206%2C%208%2C%2012%2C%2015%2C%2023%2C%2026%2C%2031%2C%2035%5D%0A%0A%20%20%20%20%23%20%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%28%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%2C%20%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%20%D1%81%D0%BB%D0%B5%D0%B2%D0%B0%20%D0%B8%20%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B9%20%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B0%29%0A%20%20%20%20index%20%3D%20binary_search_lcro%28nums%2C%20target%29%0A%20%20%20%20print%28%22%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%86%D0%B5%D0%BB%D0%B5%D0%B2%D0%BE%D0%B3%D0%BE%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%206%20%3D%20%22%2C%20index%29&cumulative=false&curInstr=5&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false diff --git a/ru/codes/pythontutor/chapter_searching/binary_search_edge.md b/ru/codes/pythontutor/chapter_searching/binary_search_edge.md index bf0145ace..a3ff794be 100644 --- a/ru/codes/pythontutor/chapter_searching/binary_search_edge.md +++ b/ru/codes/pythontutor/chapter_searching/binary_search_edge.md @@ -5,7 +5,7 @@ ---> -https://pythontutor.com/render.html#code=def%20binary_search_insertion%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D1%82%D0%BE%D1%87%D0%BA%D0%B8%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20%28%D1%81%20%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D0%BC%D0%B8%D1%81%D1%8F%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BC%D0%B8%29%22%22%22%0A%20%20%20%20i%2C%20j%20%3D%200%2C%20len%28nums%29%20-%201%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B4%D0%B2%D1%83%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B5%20%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%20%5B0%2C%20n-1%5D%0A%20%20%20%20while%20i%20%3C%3D%20j%3A%0A%20%20%20%20%20%20%20%20m%20%3D%20%28i%20%2B%20j%29%20%2F%2F%202%20%20%23%20%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D1%8C%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%81%D0%B5%D1%80%D0%B5%D0%B4%D0%B8%D0%BD%D1%8B%20m%0A%20%20%20%20%20%20%20%20if%20nums%5Bm%5D%20%3C%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20i%20%3D%20m%20%2B%201%20%20%23%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bm%2B1%2C%20j%5D%0A%20%20%20%20%20%20%20%20elif%20nums%5Bm%5D%20%3E%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20j%20%3D%20m%20-%201%20%20%23%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bi%2C%20m-1%5D%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20j%20%3D%20m%20-%201%20%20%23%20%D0%9F%D0%B5%D1%80%D0%B2%D1%8B%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bi%2C%20m-1%5D%0A%20%20%20%20%23%20%D0%92%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D1%82%D0%BE%D1%87%D0%BA%D1%83%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20i%0A%20%20%20%20return%20i%0A%0Adef%20binary_search_left_edge%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D1%81%D0%B0%D0%BC%D0%BE%D0%B3%D0%BE%20%D0%BB%D0%B5%D0%B2%D0%BE%D0%B3%D0%BE%20target%22%22%22%0A%20%20%20%20%23%20%D0%AD%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D1%83%20%D1%82%D0%BE%D1%87%D0%BA%D0%B8%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20target%0A%20%20%20%20i%20%3D%20binary_search_insertion%28nums%2C%20target%29%0A%20%20%20%20%23%20target%20%D0%BD%D0%B5%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%2C%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20-1%0A%20%20%20%20if%20i%20%3D%3D%20len%28nums%29%20or%20nums%5Bi%5D%20%21%3D%20target%3A%0A%20%20%20%20%20%20%20%20return%20-1%0A%20%20%20%20%23%20%D0%9D%D0%B0%D0%B9%D1%82%D0%B8%20target%20%D0%B8%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20i%0A%20%20%20%20return%20i%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20%D1%81%20%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D0%BC%D0%B8%D1%81%D1%8F%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BC%D0%B8%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%206%2C%206%2C%206%2C%206%2C%206%2C%2010%2C%2012%2C%2015%5D%0A%20%20%20%20%23%20%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9%20%D0%B8%20%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B9%20%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B%0A%20%20%20%20target%20%3D%206%0A%20%20%20%20index%20%3D%20binary_search_left_edge%28nums%2C%20target%29%0A%20%20%20%20print%28f%22%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%81%D0%B0%D0%BC%D0%BE%D0%B3%D0%BE%20%D0%BB%D0%B5%D0%B2%D0%BE%D0%B3%D0%BE%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%7Btarget%7D%20%D1%80%D0%B0%D0%B2%D0%B5%D0%BD%20%7Bindex%7D%22%29&cumulative=false&curInstr=6&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false +https://pythontutor.com/render.html#code=def%20binary_search_insertion%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D1%82%D0%BE%D1%87%D0%BA%D0%B8%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20%28%D1%81%20%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D0%BC%D0%B8%D1%81%D1%8F%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BC%D0%B8%29%22%22%22%0A%20%20%20%20i%2C%20j%20%3D%200%2C%20len%28nums%29%20-%201%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%20%5B0%2C%20n-1%5D%0A%20%20%20%20while%20i%20%3C%3D%20j%3A%0A%20%20%20%20%20%20%20%20m%20%3D%20%28i%20%2B%20j%29%20%2F%2F%202%20%20%23%20%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D1%8C%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%81%D0%B5%D1%80%D0%B5%D0%B4%D0%B8%D0%BD%D1%8B%20m%0A%20%20%20%20%20%20%20%20if%20nums%5Bm%5D%20%3C%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20i%20%3D%20m%20%2B%201%20%20%23%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bm%2B1%2C%20j%5D%0A%20%20%20%20%20%20%20%20elif%20nums%5Bm%5D%20%3E%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20j%20%3D%20m%20-%201%20%20%23%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bi%2C%20m-1%5D%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20j%20%3D%20m%20-%201%20%20%23%20%D0%9F%D0%B5%D1%80%D0%B2%D1%8B%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%2C%20%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B8%D0%B9%20target%2C%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bi%2C%20m-1%5D%0A%20%20%20%20%23%20%D0%92%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D1%82%D0%BE%D1%87%D0%BA%D1%83%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20i%0A%20%20%20%20return%20i%0A%0Adef%20binary_search_left_edge%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D1%81%D0%B0%D0%BC%D0%BE%D0%B3%D0%BE%20%D0%BB%D0%B5%D0%B2%D0%BE%D0%B3%D0%BE%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20target%22%22%22%0A%20%20%20%20%23%20%D0%AD%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D1%83%20%D1%82%D0%BE%D1%87%D0%BA%D0%B8%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20target%0A%20%20%20%20i%20%3D%20binary_search_insertion%28nums%2C%20target%29%0A%20%20%20%20%23%20target%20%D0%BD%D0%B5%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%2C%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20-1%0A%20%20%20%20if%20i%20%3D%3D%20len%28nums%29%20or%20nums%5Bi%5D%20%21%3D%20target%3A%0A%20%20%20%20%20%20%20%20return%20-1%0A%20%20%20%20%23%20target%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%2C%20%D0%B2%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%89%D0%B0%D0%B5%D1%82%D1%81%D1%8F%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20i%0A%20%20%20%20return%20i%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20%D1%81%20%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D0%BC%D0%B8%D1%81%D1%8F%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BC%D0%B8%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%206%2C%206%2C%206%2C%206%2C%206%2C%2010%2C%2012%2C%2015%5D%0A%20%20%20%20%23%20%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9%20%D0%B8%20%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B9%20%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B%0A%20%20%20%20target%20%3D%206%0A%20%20%20%20index%20%3D%20binary_search_left_edge%28nums%2C%20target%29%0A%20%20%20%20print%28f%22%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%81%D0%B0%D0%BC%D0%BE%D0%B3%D0%BE%20%D0%BB%D0%B5%D0%B2%D0%BE%D0%B3%D0%BE%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%7Btarget%7D%20%D1%80%D0%B0%D0%B2%D0%B5%D0%BD%20%7Bindex%7D%22%29&cumulative=false&curInstr=6&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false -https://pythontutor.com/render.html#code=def%20binary_search_insertion%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D1%82%D0%BE%D1%87%D0%BA%D0%B8%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20%28%D1%81%20%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D0%BC%D0%B8%D1%81%D1%8F%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BC%D0%B8%29%22%22%22%0A%20%20%20%20i%2C%20j%20%3D%200%2C%20len%28nums%29%20-%201%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B4%D0%B2%D1%83%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B5%20%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%20%5B0%2C%20n-1%5D%0A%20%20%20%20while%20i%20%3C%3D%20j%3A%0A%20%20%20%20%20%20%20%20m%20%3D%20%28i%20%2B%20j%29%20%2F%2F%202%20%20%23%20%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D1%8C%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%81%D0%B5%D1%80%D0%B5%D0%B4%D0%B8%D0%BD%D1%8B%20m%0A%20%20%20%20%20%20%20%20if%20nums%5Bm%5D%20%3C%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20i%20%3D%20m%20%2B%201%20%20%23%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bm%2B1%2C%20j%5D%0A%20%20%20%20%20%20%20%20elif%20nums%5Bm%5D%20%3E%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20j%20%3D%20m%20-%201%20%20%23%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bi%2C%20m-1%5D%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20j%20%3D%20m%20-%201%20%20%23%20%D0%9F%D0%B5%D1%80%D0%B2%D1%8B%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bi%2C%20m-1%5D%0A%20%20%20%20%23%20%D0%92%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D1%82%D0%BE%D1%87%D0%BA%D1%83%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20i%0A%20%20%20%20return%20i%0A%0Adef%20binary_search_right_edge%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D1%81%D0%B0%D0%BC%D0%BE%D0%B3%D0%BE%20%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B3%D0%BE%20target%22%22%22%0A%20%20%20%20%23%20%D0%9F%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D1%83%20%D0%B2%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D1%81%D0%B0%D0%BC%D0%BE%D0%B3%D0%BE%20%D0%BB%D0%B5%D0%B2%D0%BE%D0%B3%D0%BE%20target%20%2B%201%0A%20%20%20%20i%20%3D%20binary_search_insertion%28nums%2C%20target%20%2B%201%29%0A%20%20%20%20%23%20j%20%D1%83%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D0%B5%D1%82%20%D0%BD%D0%B0%20%D1%81%D0%B0%D0%BC%D1%8B%D0%B9%20%D0%BF%D1%80%D0%B0%D0%B2%D1%8B%D0%B9%20target%2C%20%D0%B0%20i%20%E2%80%94%20%D0%BD%D0%B0%20%D0%BF%D0%B5%D1%80%D0%B2%D1%8B%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B5%20target%0A%20%20%20%20j%20%3D%20i%20-%201%0A%20%20%20%20%23%20target%20%D0%BD%D0%B5%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%2C%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20-1%0A%20%20%20%20if%20j%20%3D%3D%20-1%20or%20nums%5Bj%5D%20%21%3D%20target%3A%0A%20%20%20%20%20%20%20%20return%20-1%0A%20%20%20%20%23%20%D0%9D%D0%B0%D0%B9%D1%82%D0%B8%20target%20%D0%B8%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20j%0A%20%20%20%20return%20j%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20%D1%81%20%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D0%BC%D0%B8%D1%81%D1%8F%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BC%D0%B8%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%206%2C%206%2C%206%2C%206%2C%206%2C%2010%2C%2012%2C%2015%5D%0A%20%20%20%20%23%20%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9%20%D0%B8%20%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B9%20%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B%0A%20%20%20%20target%20%3D%206%0A%20%20%20%20index%20%3D%20binary_search_right_edge%28nums%2C%20target%29%0A%20%20%20%20print%28f%22%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%81%D0%B0%D0%BC%D0%BE%D0%B3%D0%BE%20%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B3%D0%BE%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%7Btarget%7D%20%D1%80%D0%B0%D0%B2%D0%B5%D0%BD%20%7Bindex%7D%22%29&cumulative=false&curInstr=6&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false +https://pythontutor.com/render.html#code=def%20binary_search_insertion%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D1%82%D0%BE%D1%87%D0%BA%D0%B8%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20%28%D1%81%20%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D0%BC%D0%B8%D1%81%D1%8F%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BC%D0%B8%29%22%22%22%0A%20%20%20%20i%2C%20j%20%3D%200%2C%20len%28nums%29%20-%201%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%20%5B0%2C%20n-1%5D%0A%20%20%20%20while%20i%20%3C%3D%20j%3A%0A%20%20%20%20%20%20%20%20m%20%3D%20%28i%20%2B%20j%29%20%2F%2F%202%20%20%23%20%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D1%8C%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%81%D0%B5%D1%80%D0%B5%D0%B4%D0%B8%D0%BD%D1%8B%20m%0A%20%20%20%20%20%20%20%20if%20nums%5Bm%5D%20%3C%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20i%20%3D%20m%20%2B%201%20%20%23%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bm%2B1%2C%20j%5D%0A%20%20%20%20%20%20%20%20elif%20nums%5Bm%5D%20%3E%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20j%20%3D%20m%20-%201%20%20%23%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bi%2C%20m-1%5D%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20j%20%3D%20m%20-%201%20%20%23%20%D0%9F%D0%B5%D1%80%D0%B2%D1%8B%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%2C%20%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B8%D0%B9%20target%2C%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bi%2C%20m-1%5D%0A%20%20%20%20%23%20%D0%92%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D1%82%D0%BE%D1%87%D0%BA%D1%83%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20i%0A%20%20%20%20return%20i%0A%0Adef%20binary_search_right_edge%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D1%81%D0%B0%D0%BC%D0%BE%D0%B3%D0%BE%20%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B3%D0%BE%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20target%22%22%22%0A%20%20%20%20%23%20%D0%9F%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D1%83%20%D0%B2%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D1%81%D0%B0%D0%BC%D0%BE%D0%B3%D0%BE%20%D0%BB%D0%B5%D0%B2%D0%BE%D0%B3%D0%BE%20target%20%2B%201%0A%20%20%20%20i%20%3D%20binary_search_insertion%28nums%2C%20target%20%2B%201%29%0A%20%20%20%20%23%20j%20%D1%83%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D0%B5%D1%82%20%D0%BD%D0%B0%20%D1%81%D0%B0%D0%BC%D1%8B%D0%B9%20%D0%BF%D1%80%D0%B0%D0%B2%D1%8B%D0%B9%20target%2C%20%D0%B0%20i%20%E2%80%94%20%D0%BD%D0%B0%20%D0%BF%D0%B5%D1%80%D0%B2%D1%8B%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B5%20target%0A%20%20%20%20j%20%3D%20i%20-%201%0A%20%20%20%20%23%20target%20%D0%BD%D0%B5%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%2C%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20-1%0A%20%20%20%20if%20j%20%3D%3D%20-1%20or%20nums%5Bj%5D%20%21%3D%20target%3A%0A%20%20%20%20%20%20%20%20return%20-1%0A%20%20%20%20%23%20target%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%2C%20%D0%B2%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%89%D0%B0%D0%B5%D1%82%D1%81%D1%8F%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20j%0A%20%20%20%20return%20j%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20%D1%81%20%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D0%BC%D0%B8%D1%81%D1%8F%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BC%D0%B8%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%206%2C%206%2C%206%2C%206%2C%206%2C%2010%2C%2012%2C%2015%5D%0A%20%20%20%20%23%20%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9%20%D0%B8%20%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B9%20%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B%0A%20%20%20%20target%20%3D%206%0A%20%20%20%20index%20%3D%20binary_search_right_edge%28nums%2C%20target%29%0A%20%20%20%20print%28f%22%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%81%D0%B0%D0%BC%D0%BE%D0%B3%D0%BE%20%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B3%D0%BE%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%7Btarget%7D%20%D1%80%D0%B0%D0%B2%D0%B5%D0%BD%20%7Bindex%7D%22%29&cumulative=false&curInstr=6&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false diff --git a/ru/codes/pythontutor/chapter_searching/binary_search_insertion.md b/ru/codes/pythontutor/chapter_searching/binary_search_insertion.md index fe183f3c4..8fc16a5d1 100644 --- a/ru/codes/pythontutor/chapter_searching/binary_search_insertion.md +++ b/ru/codes/pythontutor/chapter_searching/binary_search_insertion.md @@ -5,7 +5,7 @@ ---> -https://pythontutor.com/render.html#code=def%20binary_search_insertion_simple%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D1%82%D0%BE%D1%87%D0%BA%D0%B8%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20%28%D0%B1%D0%B5%D0%B7%20%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D1%85%D1%81%D1%8F%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2%29%22%22%22%0A%20%20%20%20i%2C%20j%20%3D%200%2C%20len%28nums%29%20-%201%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B4%D0%B2%D1%83%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B5%20%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%20%5B0%2C%20n-1%5D%0A%20%20%20%20while%20i%20%3C%3D%20j%3A%0A%20%20%20%20%20%20%20%20m%20%3D%20%28i%20%2B%20j%29%20%2F%2F%202%20%20%23%20%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D1%8C%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%81%D0%B5%D1%80%D0%B5%D0%B4%D0%B8%D0%BD%D1%8B%20m%0A%20%20%20%20%20%20%20%20if%20nums%5Bm%5D%20%3C%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20i%20%3D%20m%20%2B%201%20%20%23%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bm%2B1%2C%20j%5D%0A%20%20%20%20%20%20%20%20elif%20nums%5Bm%5D%20%3E%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20j%20%3D%20m%20-%201%20%20%23%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bi%2C%20m-1%5D%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20m%20%20%23%20%D0%9D%D0%B0%D0%B9%D1%82%D0%B8%20target%20%D0%B8%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D1%82%D0%BE%D1%87%D0%BA%D1%83%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20m%0A%20%20%20%20%23%20target%20%D0%BD%D0%B5%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%2C%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D1%82%D0%BE%D1%87%D0%BA%D1%83%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20i%0A%20%20%20%20return%20i%0A%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20%D0%B1%D0%B5%D0%B7%20%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D1%85%D1%81%D1%8F%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%206%2C%208%2C%2012%2C%2015%2C%2023%2C%2026%2C%2031%2C%2035%5D%0A%20%20%20%20%23%20%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D1%82%D0%BE%D1%87%D0%BA%D0%B8%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%0A%20%20%20%20target%20%3D%206%0A%20%20%20%20index%20%3D%20binary_search_insertion_simple%28nums%2C%20target%29%0A%20%20%20%20print%28f%22%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D0%BF%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D0%B8%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%7Btarget%7D%20%D1%80%D0%B0%D0%B2%D0%B5%D0%BD%20%7Bindex%7D%22%29&cumulative=false&curInstr=5&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false +https://pythontutor.com/render.html#code=def%20binary_search_insertion_simple%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D1%82%D0%BE%D1%87%D0%BA%D0%B8%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20%28%D0%B1%D0%B5%D0%B7%20%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D1%85%D1%81%D1%8F%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2%29%22%22%22%0A%20%20%20%20i%2C%20j%20%3D%200%2C%20len%28nums%29%20-%201%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%20%5B0%2C%20n-1%5D%0A%20%20%20%20while%20i%20%3C%3D%20j%3A%0A%20%20%20%20%20%20%20%20m%20%3D%20%28i%20%2B%20j%29%20%2F%2F%202%20%20%23%20%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D1%8C%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%81%D0%B5%D1%80%D0%B5%D0%B4%D0%B8%D0%BD%D1%8B%20m%0A%20%20%20%20%20%20%20%20if%20nums%5Bm%5D%20%3C%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20i%20%3D%20m%20%2B%201%20%20%23%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bm%2B1%2C%20j%5D%0A%20%20%20%20%20%20%20%20elif%20nums%5Bm%5D%20%3E%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20j%20%3D%20m%20-%201%20%20%23%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bi%2C%20m-1%5D%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20m%20%20%23%20target%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%2C%20%D0%B2%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%89%D0%B0%D0%B5%D1%82%D1%81%D1%8F%20%D1%82%D0%BE%D1%87%D0%BA%D0%B0%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20m%0A%20%20%20%20%23%20target%20%D0%BD%D0%B5%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%2C%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D1%82%D0%BE%D1%87%D0%BA%D1%83%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20i%0A%20%20%20%20return%20i%0A%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20%D0%B1%D0%B5%D0%B7%20%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D1%85%D1%81%D1%8F%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%206%2C%208%2C%2012%2C%2015%2C%2023%2C%2026%2C%2031%2C%2035%5D%0A%20%20%20%20%23%20%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D1%82%D0%BE%D1%87%D0%BA%D0%B8%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%0A%20%20%20%20target%20%3D%206%0A%20%20%20%20index%20%3D%20binary_search_insertion_simple%28nums%2C%20target%29%0A%20%20%20%20print%28f%22%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D0%BF%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D0%B8%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%7Btarget%7D%20%D1%80%D0%B0%D0%B2%D0%B5%D0%BD%20%7Bindex%7D%22%29&cumulative=false&curInstr=5&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false -https://pythontutor.com/render.html#code=def%20binary_search_insertion%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D1%82%D0%BE%D1%87%D0%BA%D0%B8%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20%28%D1%81%20%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D0%BC%D0%B8%D1%81%D1%8F%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BC%D0%B8%29%22%22%22%0A%20%20%20%20i%2C%20j%20%3D%200%2C%20len%28nums%29%20-%201%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B4%D0%B2%D1%83%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B5%20%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%20%5B0%2C%20n-1%5D%0A%20%20%20%20while%20i%20%3C%3D%20j%3A%0A%20%20%20%20%20%20%20%20m%20%3D%20%28i%20%2B%20j%29%20%2F%2F%202%20%20%23%20%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D1%8C%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%81%D0%B5%D1%80%D0%B5%D0%B4%D0%B8%D0%BD%D1%8B%20m%0A%20%20%20%20%20%20%20%20if%20nums%5Bm%5D%20%3C%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20i%20%3D%20m%20%2B%201%20%20%23%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bm%2B1%2C%20j%5D%0A%20%20%20%20%20%20%20%20elif%20nums%5Bm%5D%20%3E%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20j%20%3D%20m%20-%201%20%20%23%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bi%2C%20m-1%5D%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20j%20%3D%20m%20-%201%20%20%23%20%D0%9F%D0%B5%D1%80%D0%B2%D1%8B%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bi%2C%20m-1%5D%0A%20%20%20%20%23%20%D0%92%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D1%82%D0%BE%D1%87%D0%BA%D1%83%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20i%0A%20%20%20%20return%20i%0A%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20%D1%81%20%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D0%BC%D0%B8%D1%81%D1%8F%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BC%D0%B8%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%206%2C%206%2C%206%2C%206%2C%206%2C%2010%2C%2012%2C%2015%5D%0A%20%20%20%20%23%20%D0%91%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D1%82%D0%BE%D1%87%D0%BA%D0%B8%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%0A%20%20%20%20target%20%3D%206%0A%20%20%20%20index%20%3D%20binary_search_insertion%28nums%2C%20target%29%0A%20%20%20%20print%28f%22%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D0%BF%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D0%B8%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%7Btarget%7D%20%D1%80%D0%B0%D0%B2%D0%B5%D0%BD%20%7Bindex%7D%22%29&cumulative=false&curInstr=5&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false +https://pythontutor.com/render.html#code=def%20binary_search_insertion%28nums%3A%20list%5Bint%5D%2C%20target%3A%20int%29%20-%3E%20int%3A%0A%20%20%20%20%22%22%22%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D1%82%D0%BE%D1%87%D0%BA%D0%B8%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20%28%D1%81%20%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D0%BC%D0%B8%D1%81%D1%8F%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BC%D0%B8%29%22%22%22%0A%20%20%20%20i%2C%20j%20%3D%200%2C%20len%28nums%29%20-%201%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B7%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%20%5B0%2C%20n-1%5D%0A%20%20%20%20while%20i%20%3C%3D%20j%3A%0A%20%20%20%20%20%20%20%20m%20%3D%20%28i%20%2B%20j%29%20%2F%2F%202%20%20%23%20%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D1%8C%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D1%81%D0%B5%D1%80%D0%B5%D0%B4%D0%B8%D0%BD%D1%8B%20m%0A%20%20%20%20%20%20%20%20if%20nums%5Bm%5D%20%3C%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20i%20%3D%20m%20%2B%201%20%20%23%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bm%2B1%2C%20j%5D%0A%20%20%20%20%20%20%20%20elif%20nums%5Bm%5D%20%3E%20target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20j%20%3D%20m%20-%201%20%20%23%20target%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bi%2C%20m-1%5D%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20j%20%3D%20m%20-%201%20%20%23%20%D0%9F%D0%B5%D1%80%D0%B2%D1%8B%D0%B9%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%2C%20%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B8%D0%B9%20target%2C%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B5%20%5Bi%2C%20m-1%5D%0A%20%20%20%20%23%20%D0%92%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D1%82%D0%BE%D1%87%D0%BA%D1%83%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20i%0A%20%20%20%20return%20i%0A%0A%0A%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%20%D1%81%20%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D0%BC%D0%B8%D1%81%D1%8F%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BC%D0%B8%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%206%2C%206%2C%206%2C%206%2C%206%2C%2010%2C%2012%2C%2015%5D%0A%20%20%20%20%23%20%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D1%82%D0%BE%D1%87%D0%BA%D0%B8%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%0A%20%20%20%20target%20%3D%206%0A%20%20%20%20index%20%3D%20binary_search_insertion%28nums%2C%20target%29%0A%20%20%20%20print%28f%22%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D0%BF%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D0%B8%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%7Btarget%7D%20%D1%80%D0%B0%D0%B2%D0%B5%D0%BD%20%7Bindex%7D%22%29&cumulative=false&curInstr=5&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false diff --git a/ru/codes/ruby/chapter_array_and_linkedlist/array.rb b/ru/codes/ruby/chapter_array_and_linkedlist/array.rb index b1b79b0cc..4344ff34a 100644 --- a/ru/codes/ruby/chapter_array_and_linkedlist/array.rb +++ b/ru/codes/ruby/chapter_array_and_linkedlist/array.rb @@ -6,7 +6,7 @@ Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com) ### Случайный доступ к элементу ### def random_access(nums) - # Случайным образом выбрать число из интервала [0, nums.length) + # Случайный выбор числа из диапазона [0, nums.length) random_index = Random.rand(0...nums.length) # Получить и вернуть случайный элемент @@ -14,7 +14,7 @@ def random_access(nums) end -### Увеличить длину массива ### +### Увеличение длины массива ### # Обратите внимание: Array в Ruby является динамическим массивом и может расширяться напрямую # Для удобства обучения в этой функции Array рассматривается как массив неизменяемой длины def extend(nums, enlarge) @@ -30,9 +30,9 @@ def extend(nums, enlarge) res end -### Вставка элемента num по индексу index в массив ### +### Вставка элемента num в массив по индексу index ### def insert(nums, num, index) - # Сдвинуть элемент с индексом index и все последующие элементы на одну позицию назад + # Сдвинуть элемент с индексом index и все последующие элементы на одну позицию вправо for i in (nums.length - 1).downto(index + 1) nums[i] = nums[i - 1] end @@ -44,7 +44,7 @@ end ### Удаление элемента по индексу index ### def remove(nums, index) - # Сдвинуть все элементы после индекса index на одну позицию вперед + # Сдвинуть все элементы после индекса index на одну позицию влево for i in index...(nums.length - 1) nums[i] = nums[i + 1] end diff --git a/ru/codes/ruby/chapter_array_and_linkedlist/linked_list.rb b/ru/codes/ruby/chapter_array_and_linkedlist/linked_list.rb index 9916c25c8..184ab6231 100644 --- a/ru/codes/ruby/chapter_array_and_linkedlist/linked_list.rb +++ b/ru/codes/ruby/chapter_array_and_linkedlist/linked_list.rb @@ -7,7 +7,7 @@ Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com) require_relative '../utils/list_node' require_relative '../utils/print_util' -### Вставка узла _p после узла n0 в связном списке ### +### Вставка узла _p в связный список после узла n0 ### # В Ruby `p` является встроенной функцией, а `P` — константой, поэтому вместо них можно использовать `_p` def insert(n0, _p) n1 = n0.next @@ -15,7 +15,7 @@ def insert(n0, _p) n0.next = _p end -### Удаление первого узла после узла n0 в связном списке ### +### Удаление первого узла после узла n0 из связного списка ### def remove(n0) return if n0.next.nil? @@ -25,7 +25,7 @@ def remove(n0) n0.next = n1 end -### Доступ к узлу связного списка по индексу index ### +### Доступ к узлу с индексом index в связном списке ### def access(head, index) for i in 0...index return nil if head.nil? diff --git a/ru/codes/ruby/chapter_array_and_linkedlist/list.rb b/ru/codes/ruby/chapter_array_and_linkedlist/list.rb index 296c9f6f2..afbbe695c 100644 --- a/ru/codes/ruby/chapter_array_and_linkedlist/list.rb +++ b/ru/codes/ruby/chapter_array_and_linkedlist/list.rb @@ -14,9 +14,9 @@ if __FILE__ == $0 num = nums[1] puts "Элемент по индексу 1: num = #{num}" - # Обновление элемента + # Изменение элемента nums[1] = 0 - puts "После обновления элемента по индексу 1 до 0 nums = #{nums}" + puts "После изменения значения элемента с индексом 1 на 0 nums = #{nums}" # Очистить список nums.clear diff --git a/ru/codes/ruby/chapter_array_and_linkedlist/my_list.rb b/ru/codes/ruby/chapter_array_and_linkedlist/my_list.rb index 4d2f2a01c..eeaf325e7 100644 --- a/ru/codes/ruby/chapter_array_and_linkedlist/my_list.rb +++ b/ru/codes/ruby/chapter_array_and_linkedlist/my_list.rb @@ -47,7 +47,7 @@ class MyList # При превышении вместимости по числу элементов запускается расширение extend_capacity if size == capacity - # Сдвинуть элемент с индексом index и все следующие элементы на одну позицию назад + # Сдвинуть элемент с индексом index и все следующие элементы на одну позицию вправо for j in (size - 1).downto(index) @arr[j + 1] = @arr[j] end @@ -62,7 +62,7 @@ class MyList raise IndexError, "индекс выходит за границы" if index < 0 || index >= size num = @arr[index] - # Сдвинуть все элементы после индекса index на одну позицию вперед + # Сдвинуть все элементы после индекса index на одну позицию влево for j in index...size @arr[j] = @arr[j + 1] end @@ -119,9 +119,9 @@ if __FILE__ == $0 num = nums.get(1) puts "Элемент по индексу 1: num = #{num}" - # Обновление элемента + # Изменение элемента nums.set(1, 0) - puts "После обновления элемента по индексу 1 до 0 nums = #{nums.to_array}" + puts "После изменения значения элемента с индексом 1 на 0 nums = #{nums.to_array}" # Проверка механизма расширения for i in 0...10 diff --git a/ru/codes/ruby/chapter_divide_and_conquer/binary_search_recur.rb b/ru/codes/ruby/chapter_divide_and_conquer/binary_search_recur.rb index dd4c64a6b..278cfd3db 100644 --- a/ru/codes/ruby/chapter_divide_and_conquer/binary_search_recur.rb +++ b/ru/codes/ruby/chapter_divide_and_conquer/binary_search_recur.rb @@ -4,7 +4,7 @@ Created Time: 2024-05-13 Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com) =end -### Бинарный поиск: задача f(i, j) ### +### Двоичный поиск: задача f(i, j) ### def dfs(nums, target, i, j) # Если интервал пуст, целевой элемент отсутствует, вернуть -1 return -1 if i > j @@ -24,7 +24,7 @@ def dfs(nums, target, i, j) end end -### Бинарный поиск ### +### Двоичный поиск ### def binary_search(nums, target) n = nums.length # Решить задачу f(0, n-1) @@ -36,7 +36,7 @@ if __FILE__ == $0 target = 6 nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35] - # Бинарный поиск (двусторонне замкнутый интервал) + # Двоичный поиск (замкнутый интервал) index = binary_search(nums, target) puts "Индекс целевого элемента 6 = #{index}" end diff --git a/ru/codes/ruby/chapter_searching/binary_search.rb b/ru/codes/ruby/chapter_searching/binary_search.rb index cf66a0eef..a1150a33b 100644 --- a/ru/codes/ruby/chapter_searching/binary_search.rb +++ b/ru/codes/ruby/chapter_searching/binary_search.rb @@ -4,9 +4,9 @@ Created Time: 2024-04-09 Author: Blue Bean (lonnnnnnner@gmail.com) =end -### Бинарный поиск (двусторонне замкнутый интервал) ### +### Двоичный поиск (замкнутый интервал) ### def binary_search(nums, target) - # Инициализировать двусторонне замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно + # Инициализировать замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно i, j = 0, nums.length - 1 # Цикл завершается, когда диапазон поиска пуст (при i > j диапазон пуст) @@ -26,9 +26,9 @@ def binary_search(nums, target) -1 # Целевой элемент не найден, вернуть -1 end -### Бинарный поиск (лево замкнутый, право открытый интервал) ### +### Двоичный поиск (интервал, замкнутый слева и открытый справа) ### def binary_search_lcro(nums, target) - # Инициализировать лево замкнутый, право открытый интервал [0, n), то есть i и j указывают на первый элемент массива и позицию сразу за последним элементом соответственно + # Инициализация интервала [0, n), замкнутого слева и открытого справа: i указывает на первый элемент массива, а j — на позицию сразу за последним i, j = 0, nums.length # Цикл завершается, когда диапазон поиска пуст (при i = j диапазон пуст) @@ -53,11 +53,11 @@ if __FILE__ == $0 target = 6 nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35] - # Бинарный поиск (двусторонне замкнутый интервал) + # Двоичный поиск (замкнутый интервал) index = binary_search(nums, target) puts "Индекс целевого элемента 6 = #{index}" - # Бинарный поиск (лево замкнутый, право открытый интервал) + # Двоичный поиск (интервал, замкнутый слева и открытый справа) index = binary_search_lcro(nums, target) puts "Индекс целевого элемента 6 = #{index}" end diff --git a/ru/codes/ruby/chapter_searching/binary_search_edge.rb b/ru/codes/ruby/chapter_searching/binary_search_edge.rb index 265ededb2..eaf9d7da3 100644 --- a/ru/codes/ruby/chapter_searching/binary_search_edge.rb +++ b/ru/codes/ruby/chapter_searching/binary_search_edge.rb @@ -6,7 +6,7 @@ Author: Blue Bean (lonnnnnnner@gmail.com) require_relative './binary_search_insertion' -### Бинарный поиск самого левого target ### +### Двоичный поиск самого левого элемента target ### def binary_search_left_edge(nums, target) # Эквивалентно поиску точки вставки target i = binary_search_insertion(nums, target) @@ -14,10 +14,10 @@ def binary_search_left_edge(nums, target) # target не найден, вернуть -1 return -1 if i == nums.length || nums[i] != target - i # Найти target и вернуть индекс i + i # target найден, возвращается индекс i end -### Бинарный поиск самого правого target ### +### Двоичный поиск самого правого элемента target ### def binary_search_right_edge(nums, target) # Преобразовать задачу в поиск самого левого target + 1 i = binary_search_insertion(nums, target + 1) @@ -28,7 +28,7 @@ def binary_search_right_edge(nums, target) # target не найден, вернуть -1 return -1 if j == -1 || nums[j] != target - j # Найти target и вернуть индекс j + j # target найден, возвращается индекс j end ### Driver Code ### @@ -37,7 +37,7 @@ if __FILE__ == $0 nums = [1, 3, 6, 6, 6, 6, 6, 10, 12, 15] puts "\nМассив nums = #{nums}" - # Бинарный поиск левой и правой границы + # Двоичный поиск левой и правой границы for target in [6, 7] index = binary_search_left_edge(nums, target) puts "Индекс крайнего левого элемента #{target}: #{index}" diff --git a/ru/codes/ruby/chapter_searching/binary_search_insertion.rb b/ru/codes/ruby/chapter_searching/binary_search_insertion.rb index 11a8e6d21..dc689577a 100644 --- a/ru/codes/ruby/chapter_searching/binary_search_insertion.rb +++ b/ru/codes/ruby/chapter_searching/binary_search_insertion.rb @@ -4,9 +4,9 @@ Created Time: 2024-04-09 Author: Blue Bean (lonnnnnnner@gmail.com) =end -### Бинарный поиск точки вставки (без повторяющихся элементов) ### +### Двоичный поиск точки вставки (без повторяющихся элементов) ### def binary_search_insertion_simple(nums, target) - # Инициализировать двусторонне замкнутый интервал [0, n-1] + # Инициализировать замкнутый интервал [0, n-1] i, j = 0, nums.length - 1 while i <= j @@ -18,16 +18,16 @@ def binary_search_insertion_simple(nums, target) elsif nums[m] > target j = m - 1 # target находится в интервале [i, m-1] else - return m # Найти target и вернуть точку вставки m + return m # target найден, возвращается точка вставки m end end i # target не найден, вернуть точку вставки i end -### Бинарный поиск точки вставки (с повторяющимися элементами) ### +### Двоичный поиск точки вставки (с повторяющимися элементами) ### def binary_search_insertion(nums, target) - # Инициализировать двусторонне замкнутый интервал [0, n-1] + # Инициализировать замкнутый интервал [0, n-1] i, j = 0, nums.length - 1 while i <= j @@ -51,7 +51,7 @@ if __FILE__ == $0 # Массив без повторяющихся элементов nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35] puts "\nМассив nums = #{nums}" - # Бинарный поиск точки вставки + # Двоичный поиск точки вставки for target in [6, 9] index = binary_search_insertion_simple(nums, target) puts "Индекс позиции вставки элемента #{target}: #{index}" @@ -60,7 +60,7 @@ if __FILE__ == $0 # Массив с повторяющимися элементами nums = [1, 3, 6, 6, 6, 6, 6, 10, 12, 15] puts "\nМассив nums = #{nums}" - # Бинарный поиск точки вставки + # Двоичный поиск точки вставки for target in [2, 6, 20] index = binary_search_insertion(nums, target) puts "Индекс позиции вставки элемента #{target}: #{index}" diff --git a/ru/codes/ruby/chapter_searching/linear_search.rb b/ru/codes/ruby/chapter_searching/linear_search.rb index 9326fa918..cbc912918 100644 --- a/ru/codes/ruby/chapter_searching/linear_search.rb +++ b/ru/codes/ruby/chapter_searching/linear_search.rb @@ -20,7 +20,7 @@ end def linear_search_linkedlist(head, target) # Обойти связный список while head - return head if head.val == target # Найти целевой узел и вернуть его + return head if head.val == target # Целевой узел найден, возвращается этот узел head = head.next end diff --git a/ru/codes/rust/chapter_array_and_linkedlist/array.rs b/ru/codes/rust/chapter_array_and_linkedlist/array.rs index 9e256ed48..81c9e6117 100644 --- a/ru/codes/rust/chapter_array_and_linkedlist/array.rs +++ b/ru/codes/rust/chapter_array_and_linkedlist/array.rs @@ -9,14 +9,14 @@ use rand::Rng; /* Случайный доступ к элементу */ fn random_access(nums: &[i32]) -> i32 { - // Случайным образом выбрать число из интервала [0, nums.len()) + // Случайный выбор числа из диапазона [0, nums.len()) let random_index = rand::thread_rng().gen_range(0..nums.len()); // Получить и вернуть случайный элемент let random_num = nums[random_index]; random_num } -/* Увеличить длину массива */ +/* Увеличение длины массива */ fn extend(nums: &[i32], enlarge: usize) -> Vec { // Инициализировать массив увеличенной длины let mut res: Vec = vec![0; nums.len() + enlarge]; @@ -27,9 +27,9 @@ fn extend(nums: &[i32], enlarge: usize) -> Vec { res } -/* Вставить элемент num по индексу index в массив */ +/* Вставка элемента num в массив по индексу index */ fn insert(nums: &mut [i32], num: i32, index: usize) { - // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию вправо for i in (index + 1..nums.len()).rev() { nums[i] = nums[i - 1]; } @@ -37,9 +37,9 @@ fn insert(nums: &mut [i32], num: i32, index: usize) { nums[index] = num; } -/* Удалить элемент по индексу index */ +/* Удаление элемента по индексу index */ fn remove(nums: &mut [i32], index: usize) { - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for i in index..nums.len() - 1 { nums[i] = nums[i + 1]; } @@ -59,7 +59,7 @@ fn traverse(nums: &[i32]) { } } -/* Найти заданный элемент в массиве */ +/* Поиск заданного элемента в массиве */ fn find(nums: &[i32], target: i32) -> Option { for i in 0..nums.len() { if nums[i] == target { diff --git a/ru/codes/rust/chapter_array_and_linkedlist/linked_list.rs b/ru/codes/rust/chapter_array_and_linkedlist/linked_list.rs index 845b60965..ad1de2288 100644 --- a/ru/codes/rust/chapter_array_and_linkedlist/linked_list.rs +++ b/ru/codes/rust/chapter_array_and_linkedlist/linked_list.rs @@ -8,7 +8,7 @@ use hello_algo_rust::include::{print_util, ListNode}; use std::cell::RefCell; use std::rc::Rc; -/* Вставить узел P после узла n0 в связном списке */ +/* Вставка узла P в связный список после узла n0 */ #[allow(non_snake_case)] pub fn insert(n0: &Rc>>, P: Rc>>) { let n1 = n0.borrow_mut().next.take(); @@ -16,7 +16,7 @@ pub fn insert(n0: &Rc>>, P: Rc>>) { n0.borrow_mut().next = Some(P); } -/* Удалить первый узел после узла n0 в связном списке */ +/* Удаление первого узла после узла n0 из связного списка */ #[allow(non_snake_case)] pub fn remove(n0: &Rc>>) { // n0 -> P -> n1 @@ -27,7 +27,7 @@ pub fn remove(n0: &Rc>>) { } } -/* Доступ к узлу связного списка по индексу index */ +/* Доступ к узлу с индексом index в связном списке */ pub fn access(head: Rc>>, index: i32) -> Option>>> { fn dfs( head: Option<&Rc>>>, @@ -47,7 +47,7 @@ pub fn access(head: Rc>>, index: i32) -> Option(head: Rc>>, target: T) -> i32 { fn find(head: Option<&Rc>>>, target: T, idx: i32) -> i32 { if let Some(node) = head { diff --git a/ru/codes/rust/chapter_array_and_linkedlist/list.rs b/ru/codes/rust/chapter_array_and_linkedlist/list.rs index 6143f9005..962f73b71 100644 --- a/ru/codes/rust/chapter_array_and_linkedlist/list.rs +++ b/ru/codes/rust/chapter_array_and_linkedlist/list.rs @@ -16,9 +16,9 @@ fn main() { let num = nums[1]; println!("\nЭлемент по индексу 1: num = {num}"); - // Обновление элемента + // Изменение элемента nums[1] = 0; - print!("После обновления элемента по индексу 1 до 0 nums = "); + print!("После изменения значения элемента с индексом 1 на 0 nums = "); print_util::print_array(&nums); // Очистить список diff --git a/ru/codes/rust/chapter_array_and_linkedlist/my_list.rs b/ru/codes/rust/chapter_array_and_linkedlist/my_list.rs index e6085bc7f..89a0e15ff 100644 --- a/ru/codes/rust/chapter_array_and_linkedlist/my_list.rs +++ b/ru/codes/rust/chapter_array_and_linkedlist/my_list.rs @@ -47,7 +47,7 @@ impl MyList { return self.arr[index]; } - /* Обновление элемента */ + /* Изменение элемента */ pub fn set(&mut self, index: usize, num: i32) { if index >= self.size { panic!("индекс выходит за границы") @@ -75,7 +75,7 @@ impl MyList { if self.size == self.capacity() { self.extend_capacity(); } - // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию вправо for j in (index..self.size).rev() { self.arr[j + 1] = self.arr[j]; } @@ -90,7 +90,7 @@ impl MyList { panic!("индекс выходит за границы") }; let num = self.arr[index]; - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for j in index..self.size - 1 { self.arr[j] = self.arr[j + 1]; } @@ -148,9 +148,9 @@ fn main() { let num = nums.get(1); println!("\nЭлемент по индексу 1: num = {num}"); - /* Обновление элемента */ + /* Изменение элемента */ nums.set(1, 0); - print!("После обновления элемента по индексу 1 до 0 nums = "); + print!("После изменения значения элемента с индексом 1 на 0 nums = "); print_util::print_array(&nums.to_array()); /* Проверка механизма расширения */ diff --git a/ru/codes/rust/chapter_divide_and_conquer/binary_search_recur.rs b/ru/codes/rust/chapter_divide_and_conquer/binary_search_recur.rs index 63c74b080..ae4d9c02d 100644 --- a/ru/codes/rust/chapter_divide_and_conquer/binary_search_recur.rs +++ b/ru/codes/rust/chapter_divide_and_conquer/binary_search_recur.rs @@ -4,7 +4,7 @@ * Author: codingonion (coderonion@gmail.com) */ -/* Бинарный поиск: задача f(i, j) */ +/* Двоичный поиск: задача f(i, j) */ fn dfs(nums: &[i32], target: i32, i: i32, j: i32) -> i32 { // Если интервал пуст, целевой элемент отсутствует, вернуть -1 if i > j { @@ -23,7 +23,7 @@ fn dfs(nums: &[i32], target: i32, i: i32, j: i32) -> i32 { } } -/* Бинарный поиск */ +/* Двоичный поиск */ fn binary_search(nums: &[i32], target: i32) -> i32 { let n = nums.len() as i32; // Решить задачу f(0, n-1) @@ -35,7 +35,7 @@ pub fn main() { let target = 6; let nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]; - // Бинарный поиск (двусторонне замкнутый интервал) + // Двоичный поиск (замкнутый интервал) let index = binary_search(&nums, target); println!("Индекс целевого элемента 6 = {index}"); } diff --git a/ru/codes/rust/chapter_searching/binary_search.rs b/ru/codes/rust/chapter_searching/binary_search.rs index 7ad51483b..312af6b06 100644 --- a/ru/codes/rust/chapter_searching/binary_search.rs +++ b/ru/codes/rust/chapter_searching/binary_search.rs @@ -4,9 +4,9 @@ * Author: codingonion (coderonion@gmail.com) */ -/* Бинарный поиск (двусторонне замкнутый интервал) */ +/* Двоичный поиск (замкнутый интервал) */ fn binary_search(nums: &[i32], target: i32) -> i32 { - // Инициализировать двусторонне замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно + // Инициализировать замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно let mut i = 0; let mut j = nums.len() as i32 - 1; // Цикл завершается, когда диапазон поиска пуст (при i > j диапазон пуст) @@ -27,9 +27,9 @@ fn binary_search(nums: &[i32], target: i32) -> i32 { return -1; } -/* Бинарный поиск (лево замкнутый, право открытый интервал) */ +/* Двоичный поиск (интервал, замкнутый слева и открытый справа) */ fn binary_search_lcro(nums: &[i32], target: i32) -> i32 { - // Инициализировать лево замкнутый, право открытый интервал [0, n), то есть i и j указывают на первый элемент массива и позицию сразу за последним элементом соответственно + // Инициализация интервала [0, n), замкнутого слева и открытого справа: i указывает на первый элемент массива, а j — на позицию сразу за последним let mut i = 0; let mut j = nums.len() as i32; // Цикл завершается, когда диапазон поиска пуст (при i = j диапазон пуст) @@ -55,11 +55,11 @@ pub fn main() { let target = 6; let nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]; - // Бинарный поиск (двусторонне замкнутый интервал) + // Двоичный поиск (замкнутый интервал) let mut index = binary_search(&nums, target); println!("Индекс целевого элемента 6 = {index}"); - // Бинарный поиск (лево замкнутый, право открытый интервал) + // Двоичный поиск (интервал, замкнутый слева и открытый справа) index = binary_search_lcro(&nums, target); println!("Индекс целевого элемента 6 = {index}"); } diff --git a/ru/codes/rust/chapter_searching/binary_search_edge.rs b/ru/codes/rust/chapter_searching/binary_search_edge.rs index df7a2ee95..b161c9f8c 100644 --- a/ru/codes/rust/chapter_searching/binary_search_edge.rs +++ b/ru/codes/rust/chapter_searching/binary_search_edge.rs @@ -8,7 +8,7 @@ mod binary_search_insertion; use binary_search_insertion::binary_search_insertion; -/* Бинарный поиск самого левого target */ +/* Двоичный поиск самого левого элемента target */ fn binary_search_left_edge(nums: &[i32], target: i32) -> i32 { // Эквивалентно поиску точки вставки target let i = binary_search_insertion(nums, target); @@ -16,11 +16,11 @@ fn binary_search_left_edge(nums: &[i32], target: i32) -> i32 { if i == nums.len() as i32 || nums[i as usize] != target { return -1; } - // Найти target и вернуть индекс i + // target найден, возвращается индекс i i } -/* Бинарный поиск самого правого target */ +/* Двоичный поиск самого правого элемента target */ fn binary_search_right_edge(nums: &[i32], target: i32) -> i32 { // Преобразовать задачу в поиск самого левого target + 1 let i = binary_search_insertion(nums, target + 1); @@ -30,7 +30,7 @@ fn binary_search_right_edge(nums: &[i32], target: i32) -> i32 { if j == -1 || nums[j as usize] != target { return -1; } - // Найти target и вернуть индекс j + // target найден, возвращается индекс j j } @@ -40,7 +40,7 @@ fn main() { let nums = [1, 3, 6, 6, 6, 6, 6, 10, 12, 15]; println!("\nМассив nums = {:?}", nums); - // Бинарный поиск левой и правой границы + // Двоичный поиск левой и правой границы for target in [6, 7] { let index = binary_search_left_edge(&nums, target); println!("Индекс самого левого элемента {} равен {}", target, index); diff --git a/ru/codes/rust/chapter_searching/binary_search_insertion.rs b/ru/codes/rust/chapter_searching/binary_search_insertion.rs index 0d9cdef1e..86f3a8c74 100644 --- a/ru/codes/rust/chapter_searching/binary_search_insertion.rs +++ b/ru/codes/rust/chapter_searching/binary_search_insertion.rs @@ -5,9 +5,9 @@ */ #![allow(unused)] -/* Бинарный поиск точки вставки (без повторяющихся элементов) */ +/* Двоичный поиск точки вставки (без повторяющихся элементов) */ fn binary_search_insertion_simple(nums: &[i32], target: i32) -> i32 { - let (mut i, mut j) = (0, nums.len() as i32 - 1); // Инициализировать двусторонне замкнутый интервал [0, n-1] + let (mut i, mut j) = (0, nums.len() as i32 - 1); // Инициализировать замкнутый интервал [0, n-1] while i <= j { let m = i + (j - i) / 2; // Вычислить индекс середины m if nums[m as usize] < target { @@ -22,9 +22,9 @@ fn binary_search_insertion_simple(nums: &[i32], target: i32) -> i32 { i } -/* Бинарный поиск точки вставки (с повторяющимися элементами) */ +/* Двоичный поиск точки вставки (с повторяющимися элементами) */ pub fn binary_search_insertion(nums: &[i32], target: i32) -> i32 { - let (mut i, mut j) = (0, nums.len() as i32 - 1); // Инициализировать двусторонне замкнутый интервал [0, n-1] + let (mut i, mut j) = (0, nums.len() as i32 - 1); // Инициализировать замкнутый интервал [0, n-1] while i <= j { let m = i + (j - i) / 2; // Вычислить индекс середины m if nums[m as usize] < target { @@ -44,7 +44,7 @@ fn main() { // Массив без повторяющихся элементов let nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]; println!("\nМассив nums = {:?}", nums); - // Бинарный поиск точки вставки + // Двоичный поиск точки вставки for target in [6, 9] { let index = binary_search_insertion_simple(&nums, target); println!("Индекс позиции вставки элемента {} равен {}", target, index); @@ -53,7 +53,7 @@ fn main() { // Массив с повторяющимися элементами let nums = [1, 3, 6, 6, 6, 6, 6, 10, 12, 15]; println!("\nМассив nums = {:?}", nums); - // Бинарный поиск точки вставки + // Двоичный поиск точки вставки for target in [2, 6, 20] { let index = binary_search_insertion(&nums, target); println!("Индекс позиции вставки элемента {} равен {}", target, index); diff --git a/ru/codes/rust/chapter_searching/linear_search.rs b/ru/codes/rust/chapter_searching/linear_search.rs index a64183fa6..7af5fede3 100644 --- a/ru/codes/rust/chapter_searching/linear_search.rs +++ b/ru/codes/rust/chapter_searching/linear_search.rs @@ -26,11 +26,11 @@ fn linear_search_linked_list( head: Rc>>, target: i32, ) -> Option>>> { - // Найти целевой узел и вернуть его + // Целевой узел найден, возвращается этот узел if head.borrow().val == target { return Some(head); }; - // Найти целевой узел и вернуть его + // Целевой узел найден, возвращается этот узел if let Some(node) = &head.borrow_mut().next { return linear_search_linked_list(node.clone(), target); } diff --git a/ru/codes/swift/chapter_array_and_linkedlist/array.swift b/ru/codes/swift/chapter_array_and_linkedlist/array.swift index 227807284..e36d184cb 100644 --- a/ru/codes/swift/chapter_array_and_linkedlist/array.swift +++ b/ru/codes/swift/chapter_array_and_linkedlist/array.swift @@ -6,14 +6,14 @@ /* Случайный доступ к элементу */ func randomAccess(nums: [Int]) -> Int { - // Случайным образом выбрать число из интервала [0, nums.count) + // Случайный выбор числа из диапазона [0, nums.count) let randomIndex = nums.indices.randomElement()! // Получить и вернуть случайный элемент let randomNum = nums[randomIndex] return randomNum } -/* Увеличить длину массива */ +/* Увеличение длины массива */ func extend(nums: [Int], enlarge: Int) -> [Int] { // Инициализировать массив увеличенной длины var res = Array(repeating: 0, count: nums.count + enlarge) @@ -25,9 +25,9 @@ func extend(nums: [Int], enlarge: Int) -> [Int] { return res } -/* Вставить элемент num по индексу index в массив */ +/* Вставка элемента num в массив по индексу index */ func insert(nums: inout [Int], num: Int, index: Int) { - // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию вправо for i in stride(from: nums.count - 1, to: index, by: -1) { nums[i] = nums[i - 1] } @@ -35,9 +35,9 @@ func insert(nums: inout [Int], num: Int, index: Int) { nums[index] = num } -/* Удалить элемент по индексу index */ +/* Удаление элемента по индексу index */ func remove(nums: inout [Int], index: Int) { - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for i in nums.indices.dropFirst(index).dropLast() { nums[i] = nums[i + 1] } @@ -61,7 +61,7 @@ func traverse(nums: [Int]) { } } -/* Найти заданный элемент в массиве */ +/* Поиск заданного элемента в массиве */ func find(nums: [Int], target: Int) -> Int { for i in nums.indices { if nums[i] == target { diff --git a/ru/codes/swift/chapter_array_and_linkedlist/linked_list.swift b/ru/codes/swift/chapter_array_and_linkedlist/linked_list.swift index 771194d87..b91d87132 100644 --- a/ru/codes/swift/chapter_array_and_linkedlist/linked_list.swift +++ b/ru/codes/swift/chapter_array_and_linkedlist/linked_list.swift @@ -6,14 +6,14 @@ import utils -/* Вставить узел P после узла n0 в связном списке */ +/* Вставка узла P в связный список после узла n0 */ func insert(n0: ListNode, P: ListNode) { let n1 = n0.next P.next = n1 n0.next = P } -/* Удалить первый узел после узла n0 в связном списке */ +/* Удаление первого узла после узла n0 из связного списка */ func remove(n0: ListNode) { if n0.next == nil { return @@ -24,7 +24,7 @@ func remove(n0: ListNode) { n0.next = n1 } -/* Доступ к узлу связного списка по индексу index */ +/* Доступ к узлу с индексом index в связном списке */ func access(head: ListNode, index: Int) -> ListNode? { var head: ListNode? = head for _ in 0 ..< index { @@ -36,7 +36,7 @@ func access(head: ListNode, index: Int) -> ListNode? { return head } -/* Найти в связном списке первый узел со значением target */ +/* Поиск первого узла со значением target в связном списке */ func find(head: ListNode, target: Int) -> Int { var head: ListNode? = head var index = 0 diff --git a/ru/codes/swift/chapter_array_and_linkedlist/list.swift b/ru/codes/swift/chapter_array_and_linkedlist/list.swift index 507c619b8..2f02668a4 100644 --- a/ru/codes/swift/chapter_array_and_linkedlist/list.swift +++ b/ru/codes/swift/chapter_array_and_linkedlist/list.swift @@ -16,9 +16,9 @@ enum List { let num = nums[1] print("Элемент по индексу 1: num = \(num)") - /* Обновление элемента */ + /* Изменение элемента */ nums[1] = 0 - print("После обновления элемента по индексу 1 до 0 nums = \(nums)") + print("После изменения значения элемента с индексом 1 на 0 nums = \(nums)") /* Очистить список */ nums.removeAll() diff --git a/ru/codes/swift/chapter_array_and_linkedlist/my_list.swift b/ru/codes/swift/chapter_array_and_linkedlist/my_list.swift index e4a89835c..c0312d097 100644 --- a/ru/codes/swift/chapter_array_and_linkedlist/my_list.swift +++ b/ru/codes/swift/chapter_array_and_linkedlist/my_list.swift @@ -38,7 +38,7 @@ class MyList { return arr[index] } - /* Обновление элемента */ + /* Изменение элемента */ func set(index: Int, num: Int) { if index < 0 || index >= size() { fatalError("индекс выходит за границы") @@ -66,7 +66,7 @@ class MyList { if size() == capacity() { extendCapacity() } - // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию вправо for j in (index ..< size()).reversed() { arr[j + 1] = arr[j] } @@ -82,7 +82,7 @@ class MyList { fatalError("индекс выходит за границы") } let num = arr[index] - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for j in index ..< (size() - 1) { arr[j] = arr[j + 1] } @@ -132,9 +132,9 @@ enum _MyList { let num = nums.get(index: 1) print("Элемент по индексу 1: num = \(num)") - /* Обновление элемента */ + /* Изменение элемента */ nums.set(index: 1, num: 0) - print("После обновления элемента по индексу 1 до 0 nums = \(nums.toArray())") + print("После изменения значения элемента с индексом 1 на 0 nums = \(nums.toArray())") /* Проверка механизма расширения */ for i in 0 ..< 10 { diff --git a/ru/codes/swift/chapter_divide_and_conquer/binary_search_recur.swift b/ru/codes/swift/chapter_divide_and_conquer/binary_search_recur.swift index 10e5667fc..ea02dae04 100644 --- a/ru/codes/swift/chapter_divide_and_conquer/binary_search_recur.swift +++ b/ru/codes/swift/chapter_divide_and_conquer/binary_search_recur.swift @@ -4,7 +4,7 @@ * Author: nuomi1 (nuomi1@qq.com) */ -/* Бинарный поиск: задача f(i, j) */ +/* Двоичный поиск: задача f(i, j) */ func dfs(nums: [Int], target: Int, i: Int, j: Int) -> Int { // Если интервал пуст, целевой элемент отсутствует, вернуть -1 if i > j { @@ -24,7 +24,7 @@ func dfs(nums: [Int], target: Int, i: Int, j: Int) -> Int { } } -/* Бинарный поиск */ +/* Двоичный поиск */ func binarySearch(nums: [Int], target: Int) -> Int { // Решить задачу f(0, n-1) dfs(nums: nums, target: target, i: nums.startIndex, j: nums.endIndex - 1) @@ -37,7 +37,7 @@ enum BinarySearchRecur { let target = 6 let nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35] - // Бинарный поиск (двусторонне замкнутый интервал) + // Двоичный поиск (замкнутый интервал) let index = binarySearch(nums: nums, target: target) print("Индекс целевого элемента 6 = \(index)") } diff --git a/ru/codes/swift/chapter_searching/binary_search.swift b/ru/codes/swift/chapter_searching/binary_search.swift index 97317d4d1..81fb89b6f 100644 --- a/ru/codes/swift/chapter_searching/binary_search.swift +++ b/ru/codes/swift/chapter_searching/binary_search.swift @@ -4,9 +4,9 @@ * Author: nuomi1 (nuomi1@qq.com) */ -/* Бинарный поиск (двусторонне замкнутый интервал) */ +/* Двоичный поиск (замкнутый интервал) */ func binarySearch(nums: [Int], target: Int) -> Int { - // Инициализировать двусторонне замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно + // Инициализировать замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно var i = nums.startIndex var j = nums.endIndex - 1 // Цикл завершается, когда диапазон поиска пуст (при i > j диапазон пуст) @@ -24,9 +24,9 @@ func binarySearch(nums: [Int], target: Int) -> Int { return -1 } -/* Бинарный поиск (лево замкнутый, право открытый интервал) */ +/* Двоичный поиск (интервал, замкнутый слева и открытый справа) */ func binarySearchLCRO(nums: [Int], target: Int) -> Int { - // Инициализировать лево замкнутый, право открытый интервал [0, n), то есть i и j указывают на первый элемент массива и позицию сразу за последним элементом соответственно + // Инициализация интервала [0, n), замкнутого слева и открытого справа: i указывает на первый элемент массива, а j — на позицию сразу за последним var i = nums.startIndex var j = nums.endIndex // Цикл завершается, когда диапазон поиска пуст (при i = j диапазон пуст) @@ -51,11 +51,11 @@ enum BinarySearch { let target = 6 let nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35] - /* Бинарный поиск (двусторонне замкнутый интервал) */ + /* Двоичный поиск (замкнутый интервал) */ var index = binarySearch(nums: nums, target: target) print("Индекс целевого элемента 6 = \(index)") - /* Бинарный поиск (лево замкнутый, право открытый интервал) */ + /* Двоичный поиск (интервал, замкнутый слева и открытый справа) */ index = binarySearchLCRO(nums: nums, target: target) print("Индекс целевого элемента 6 = \(index)") } diff --git a/ru/codes/swift/chapter_searching/binary_search_edge.swift b/ru/codes/swift/chapter_searching/binary_search_edge.swift index 9948df47a..746e35f85 100644 --- a/ru/codes/swift/chapter_searching/binary_search_edge.swift +++ b/ru/codes/swift/chapter_searching/binary_search_edge.swift @@ -6,7 +6,7 @@ import binary_search_insertion_target -/* Бинарный поиск самого левого target */ +/* Двоичный поиск самого левого элемента target */ func binarySearchLeftEdge(nums: [Int], target: Int) -> Int { // Эквивалентно поиску точки вставки target let i = binarySearchInsertion(nums: nums, target: target) @@ -14,11 +14,11 @@ func binarySearchLeftEdge(nums: [Int], target: Int) -> Int { if i == nums.endIndex || nums[i] != target { return -1 } - // Найти target и вернуть индекс i + // target найден, возвращается индекс i return i } -/* Бинарный поиск самого правого target */ +/* Двоичный поиск самого правого элемента target */ func binarySearchRightEdge(nums: [Int], target: Int) -> Int { // Преобразовать задачу в поиск самого левого target + 1 let i = binarySearchInsertion(nums: nums, target: target + 1) @@ -28,7 +28,7 @@ func binarySearchRightEdge(nums: [Int], target: Int) -> Int { if j == -1 || nums[j] != target { return -1 } - // Найти target и вернуть индекс j + // target найден, возвращается индекс j return j } @@ -40,7 +40,7 @@ enum BinarySearchEdge { let nums = [1, 3, 6, 6, 6, 6, 6, 10, 12, 15] print("\nМассив nums = \(nums)") - // Бинарный поиск левой и правой границы + // Двоичный поиск левой и правой границы for target in [6, 7] { var index = binarySearchLeftEdge(nums: nums, target: target) print("Индекс самого левого элемента \(target) равен \(index)") diff --git a/ru/codes/swift/chapter_searching/binary_search_insertion.swift b/ru/codes/swift/chapter_searching/binary_search_insertion.swift index 1edeb6a36..15cfebe37 100644 --- a/ru/codes/swift/chapter_searching/binary_search_insertion.swift +++ b/ru/codes/swift/chapter_searching/binary_search_insertion.swift @@ -4,9 +4,9 @@ * Author: nuomi1 (nuomi1@qq.com) */ -/* Бинарный поиск точки вставки (без повторяющихся элементов) */ +/* Двоичный поиск точки вставки (без повторяющихся элементов) */ func binarySearchInsertionSimple(nums: [Int], target: Int) -> Int { - // Инициализировать двусторонне замкнутый интервал [0, n-1] + // Инициализировать замкнутый интервал [0, n-1] var i = nums.startIndex var j = nums.endIndex - 1 while i <= j { @@ -16,16 +16,16 @@ func binarySearchInsertionSimple(nums: [Int], target: Int) -> Int { } else if nums[m] > target { j = m - 1 // target находится в интервале [i, m-1] } else { - return m // Найти target и вернуть точку вставки m + return m // target найден, возвращается точка вставки m } } // target не найден, вернуть точку вставки i return i } -/* Бинарный поиск точки вставки (с повторяющимися элементами) */ +/* Двоичный поиск точки вставки (с повторяющимися элементами) */ public func binarySearchInsertion(nums: [Int], target: Int) -> Int { - // Инициализировать двусторонне замкнутый интервал [0, n-1] + // Инициализировать замкнутый интервал [0, n-1] var i = nums.startIndex var j = nums.endIndex - 1 while i <= j { @@ -51,7 +51,7 @@ enum BinarySearchInsertion { // Массив без повторяющихся элементов var nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35] print("\nМассив nums = \(nums)") - // Бинарный поиск точки вставки + // Двоичный поиск точки вставки for target in [6, 9] { let index = binarySearchInsertionSimple(nums: nums, target: target) print("Индекс позиции вставки элемента \(target) равен \(index)") @@ -60,7 +60,7 @@ enum BinarySearchInsertion { // Массив с повторяющимися элементами nums = [1, 3, 6, 6, 6, 6, 6, 10, 12, 15] print("\nМассив nums = \(nums)") - // Бинарный поиск точки вставки + // Двоичный поиск точки вставки for target in [2, 6, 20] { let index = binarySearchInsertion(nums: nums, target: target) print("Индекс позиции вставки элемента \(target) равен \(index)") diff --git a/ru/codes/swift/chapter_searching/binary_search_insertion_target.swift b/ru/codes/swift/chapter_searching/binary_search_insertion_target.swift index 1edeb6a36..15cfebe37 100644 --- a/ru/codes/swift/chapter_searching/binary_search_insertion_target.swift +++ b/ru/codes/swift/chapter_searching/binary_search_insertion_target.swift @@ -4,9 +4,9 @@ * Author: nuomi1 (nuomi1@qq.com) */ -/* Бинарный поиск точки вставки (без повторяющихся элементов) */ +/* Двоичный поиск точки вставки (без повторяющихся элементов) */ func binarySearchInsertionSimple(nums: [Int], target: Int) -> Int { - // Инициализировать двусторонне замкнутый интервал [0, n-1] + // Инициализировать замкнутый интервал [0, n-1] var i = nums.startIndex var j = nums.endIndex - 1 while i <= j { @@ -16,16 +16,16 @@ func binarySearchInsertionSimple(nums: [Int], target: Int) -> Int { } else if nums[m] > target { j = m - 1 // target находится в интервале [i, m-1] } else { - return m // Найти target и вернуть точку вставки m + return m // target найден, возвращается точка вставки m } } // target не найден, вернуть точку вставки i return i } -/* Бинарный поиск точки вставки (с повторяющимися элементами) */ +/* Двоичный поиск точки вставки (с повторяющимися элементами) */ public func binarySearchInsertion(nums: [Int], target: Int) -> Int { - // Инициализировать двусторонне замкнутый интервал [0, n-1] + // Инициализировать замкнутый интервал [0, n-1] var i = nums.startIndex var j = nums.endIndex - 1 while i <= j { @@ -51,7 +51,7 @@ enum BinarySearchInsertion { // Массив без повторяющихся элементов var nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35] print("\nМассив nums = \(nums)") - // Бинарный поиск точки вставки + // Двоичный поиск точки вставки for target in [6, 9] { let index = binarySearchInsertionSimple(nums: nums, target: target) print("Индекс позиции вставки элемента \(target) равен \(index)") @@ -60,7 +60,7 @@ enum BinarySearchInsertion { // Массив с повторяющимися элементами nums = [1, 3, 6, 6, 6, 6, 6, 10, 12, 15] print("\nМассив nums = \(nums)") - // Бинарный поиск точки вставки + // Двоичный поиск точки вставки for target in [2, 6, 20] { let index = binarySearchInsertion(nums: nums, target: target) print("Индекс позиции вставки элемента \(target) равен \(index)") diff --git a/ru/codes/swift/chapter_searching/linear_search.swift b/ru/codes/swift/chapter_searching/linear_search.swift index 00e23991a..080ddf404 100644 --- a/ru/codes/swift/chapter_searching/linear_search.swift +++ b/ru/codes/swift/chapter_searching/linear_search.swift @@ -24,7 +24,7 @@ func linearSearchLinkedList(head: ListNode?, target: Int) -> ListNode? { var head = head // Обойти связный список while head != nil { - // Найти целевой узел и вернуть его + // Целевой узел найден, возвращается этот узел if head?.val == target { return head } diff --git a/ru/codes/typescript/chapter_array_and_linkedlist/array.ts b/ru/codes/typescript/chapter_array_and_linkedlist/array.ts index fdab1e2f3..98080bc04 100644 --- a/ru/codes/typescript/chapter_array_and_linkedlist/array.ts +++ b/ru/codes/typescript/chapter_array_and_linkedlist/array.ts @@ -6,14 +6,14 @@ /* Случайный доступ к элементу */ function randomAccess(nums: number[]): number { - // Случайным образом выбрать число из интервала [0, nums.length) + // Случайный выбор числа из диапазона [0, nums.length) const random_index = Math.floor(Math.random() * nums.length); // Получить и вернуть случайный элемент const random_num = nums[random_index]; return random_num; } -/* Увеличить длину массива */ +/* Увеличение длины массива */ // Обратите внимание: Array в TypeScript — это динамический массив, его можно расширять напрямую // Для удобства обучения в этой функции Array рассматривается как массив неизменяемой длины function extend(nums: number[], enlarge: number): number[] { @@ -27,9 +27,9 @@ function extend(nums: number[], enlarge: number): number[] { return res; } -/* Вставить элемент num по индексу index в массив */ +/* Вставка элемента num в массив по индексу index */ function insert(nums: number[], num: number, index: number): void { - // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию вправо for (let i = nums.length - 1; i > index; i--) { nums[i] = nums[i - 1]; } @@ -37,9 +37,9 @@ function insert(nums: number[], num: number, index: number): void { nums[index] = num; } -/* Удалить элемент по индексу index */ +/* Удаление элемента по индексу index */ function remove(nums: number[], index: number): void { - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for (let i = index; i < nums.length - 1; i++) { nums[i] = nums[i + 1]; } @@ -58,7 +58,7 @@ function traverse(nums: number[]): void { } } -/* Найти заданный элемент в массиве */ +/* Поиск заданного элемента в массиве */ function find(nums: number[], target: number): number { for (let i = 0; i < nums.length; i++) { if (nums[i] === target) { diff --git a/ru/codes/typescript/chapter_array_and_linkedlist/linked_list.ts b/ru/codes/typescript/chapter_array_and_linkedlist/linked_list.ts index 0c49f7e31..9981d08a1 100644 --- a/ru/codes/typescript/chapter_array_and_linkedlist/linked_list.ts +++ b/ru/codes/typescript/chapter_array_and_linkedlist/linked_list.ts @@ -7,14 +7,14 @@ import { ListNode } from '../modules/ListNode'; import { printLinkedList } from '../modules/PrintUtil'; -/* Вставить узел P после узла n0 в связном списке */ +/* Вставка узла P в связный список после узла n0 */ function insert(n0: ListNode, P: ListNode): void { const n1 = n0.next; P.next = n1; n0.next = P; } -/* Удалить первый узел после узла n0 в связном списке */ +/* Удаление первого узла после узла n0 из связного списка */ function remove(n0: ListNode): void { if (!n0.next) { return; @@ -25,7 +25,7 @@ function remove(n0: ListNode): void { n0.next = n1; } -/* Доступ к узлу связного списка по индексу index */ +/* Доступ к узлу с индексом index в связном списке */ function access(head: ListNode | null, index: number): ListNode | null { for (let i = 0; i < index; i++) { if (!head) { @@ -36,7 +36,7 @@ function access(head: ListNode | null, index: number): ListNode | null { return head; } -/* Найти в связном списке первый узел со значением target */ +/* Поиск первого узла со значением target в связном списке */ function find(head: ListNode | null, target: number): number { let index = 0; while (head !== null) { diff --git a/ru/codes/typescript/chapter_array_and_linkedlist/list.ts b/ru/codes/typescript/chapter_array_and_linkedlist/list.ts index 788605cc1..6217db5bd 100644 --- a/ru/codes/typescript/chapter_array_and_linkedlist/list.ts +++ b/ru/codes/typescript/chapter_array_and_linkedlist/list.ts @@ -12,9 +12,9 @@ console.log(`Список nums = ${nums}`); const num: number = nums[1]; console.log(`Элемент по индексу 1: num = ${num}`); -/* Обновление элемента */ +/* Изменение элемента */ nums[1] = 0; -console.log(`После обновления элемента по индексу 1 до 0 nums = ${nums}`); +console.log(`После изменения значения элемента с индексом 1 на 0 nums = ${nums}`); /* Очистить список */ nums.length = 0; diff --git a/ru/codes/typescript/chapter_array_and_linkedlist/my_list.ts b/ru/codes/typescript/chapter_array_and_linkedlist/my_list.ts index ab222b904..22380dd15 100644 --- a/ru/codes/typescript/chapter_array_and_linkedlist/my_list.ts +++ b/ru/codes/typescript/chapter_array_and_linkedlist/my_list.ts @@ -33,7 +33,7 @@ class MyList { return this.arr[index]; } - /* Обновление элемента */ + /* Изменение элемента */ public set(index: number, num: number): void { if (index < 0 || index >= this._size) throw new Error('индекс выходит за границы'); this.arr[index] = num; @@ -55,7 +55,7 @@ class MyList { if (this._size === this._capacity) { this.extendCapacity(); } - // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию вправо for (let j = this._size - 1; j >= index; j--) { this.arr[j + 1] = this.arr[j]; } @@ -68,7 +68,7 @@ class MyList { public remove(index: number): number { if (index < 0 || index >= this._size) throw new Error('индекс выходит за границы'); let num = this.arr[index]; - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево for (let j = index; j < this._size - 1; j++) { this.arr[j] = this.arr[j + 1]; } @@ -125,9 +125,9 @@ console.log(`После удаления элемента по индексу 3 const num = nums.get(1); console.log(`Элемент по индексу 1: num = ${num}`); -/* Обновление элемента */ +/* Изменение элемента */ nums.set(1, 0); -console.log(`После обновления элемента по индексу 1 до 0 nums = ${nums.toArray()}`); +console.log(`После изменения значения элемента с индексом 1 на 0 nums = ${nums.toArray()}`); /* Проверка механизма расширения */ for (let i = 0; i < 10; i++) { diff --git a/ru/codes/typescript/chapter_divide_and_conquer/binary_search_recur.ts b/ru/codes/typescript/chapter_divide_and_conquer/binary_search_recur.ts index 6cd78cd04..17397441d 100644 --- a/ru/codes/typescript/chapter_divide_and_conquer/binary_search_recur.ts +++ b/ru/codes/typescript/chapter_divide_and_conquer/binary_search_recur.ts @@ -4,7 +4,7 @@ * Author: yuan0221 (yl1452491917@gmail.com) */ -/* Бинарный поиск: задача f(i, j) */ +/* Двоичный поиск: задача f(i, j) */ function dfs(nums: number[], target: number, i: number, j: number): number { // Если интервал пуст, целевой элемент отсутствует, вернуть -1 if (i > j) { @@ -24,7 +24,7 @@ function dfs(nums: number[], target: number, i: number, j: number): number { } } -/* Бинарный поиск */ +/* Двоичный поиск */ function binarySearch(nums: number[], target: number): number { const n = nums.length; // Решить задачу f(0, n-1) @@ -34,7 +34,7 @@ function binarySearch(nums: number[], target: number): number { /* Driver Code */ const target = 6; const nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]; -// Бинарный поиск (двусторонне замкнутый интервал) +// Двоичный поиск (замкнутый интервал) const index = binarySearch(nums, target); console.log(`Индекс целевого элемента 6 = ${index}`); diff --git a/ru/codes/typescript/chapter_searching/binary_search.ts b/ru/codes/typescript/chapter_searching/binary_search.ts index d94edbcd3..b5944b04e 100644 --- a/ru/codes/typescript/chapter_searching/binary_search.ts +++ b/ru/codes/typescript/chapter_searching/binary_search.ts @@ -4,9 +4,9 @@ * Author: Daniel (better.sunjian@gmail.com) */ -/* Бинарный поиск (двусторонне замкнутый интервал) */ +/* Двоичный поиск (замкнутый интервал) */ function binarySearch(nums: number[], target: number): number { - // Инициализировать двусторонне замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно + // Инициализировать замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно let i = 0, j = nums.length - 1; // Цикл завершается, когда диапазон поиска пуст (при i > j диапазон пуст) @@ -27,9 +27,9 @@ function binarySearch(nums: number[], target: number): number { return -1; // Целевой элемент не найден, вернуть -1 } -/* Бинарный поиск (лево замкнутый, право открытый интервал) */ +/* Двоичный поиск (интервал, замкнутый слева и открытый справа) */ function binarySearchLCRO(nums: number[], target: number): number { - // Инициализировать лево замкнутый, право открытый интервал [0, n), то есть i и j указывают на первый элемент массива и позицию сразу за последним элементом соответственно + // Инициализация интервала [0, n), замкнутого слева и открытого справа: i указывает на первый элемент массива, а j — на позицию сразу за последним let i = 0, j = nums.length; // Цикл завершается, когда диапазон поиска пуст (при i = j диапазон пуст) @@ -54,11 +54,11 @@ function binarySearchLCRO(nums: number[], target: number): number { const target = 6; const nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]; -/* Бинарный поиск (двусторонне замкнутый интервал) */ +/* Двоичный поиск (замкнутый интервал) */ let index = binarySearch(nums, target); console.info('Индекс целевого элемента 6 = %d', index); -/* Бинарный поиск (лево замкнутый, право открытый интервал) */ +/* Двоичный поиск (интервал, замкнутый слева и открытый справа) */ index = binarySearchLCRO(nums, target); console.info('Индекс целевого элемента 6 = %d', index); diff --git a/ru/codes/typescript/chapter_searching/binary_search_edge.ts b/ru/codes/typescript/chapter_searching/binary_search_edge.ts index 6ebd32c4a..4ddab08e3 100644 --- a/ru/codes/typescript/chapter_searching/binary_search_edge.ts +++ b/ru/codes/typescript/chapter_searching/binary_search_edge.ts @@ -5,7 +5,7 @@ */ import { binarySearchInsertion } from './binary_search_insertion'; -/* Бинарный поиск самого левого target */ +/* Двоичный поиск самого левого элемента target */ function binarySearchLeftEdge(nums: Array, target: number): number { // Эквивалентно поиску точки вставки target const i = binarySearchInsertion(nums, target); @@ -13,11 +13,11 @@ function binarySearchLeftEdge(nums: Array, target: number): number { if (i === nums.length || nums[i] !== target) { return -1; } - // Найти target и вернуть индекс i + // target найден, возвращается индекс i return i; } -/* Бинарный поиск самого правого target */ +/* Двоичный поиск самого правого элемента target */ function binarySearchRightEdge(nums: Array, target: number): number { // Преобразовать задачу в поиск самого левого target + 1 const i = binarySearchInsertion(nums, target + 1); @@ -27,7 +27,7 @@ function binarySearchRightEdge(nums: Array, target: number): number { if (j === -1 || nums[j] !== target) { return -1; } - // Найти target и вернуть индекс j + // target найден, возвращается индекс j return j; } @@ -35,7 +35,7 @@ function binarySearchRightEdge(nums: Array, target: number): number { // Массив с повторяющимися элементами let nums = [1, 3, 6, 6, 6, 6, 6, 10, 12, 15]; console.log('\nМассив nums = ' + nums); -// Бинарный поиск левой и правой границы +// Двоичный поиск левой и правой границы for (const target of [6, 7]) { let index = binarySearchLeftEdge(nums, target); console.log('Индекс самого левого элемента ' + target + ' = ' + index); diff --git a/ru/codes/typescript/chapter_searching/binary_search_insertion.ts b/ru/codes/typescript/chapter_searching/binary_search_insertion.ts index 8722633e6..914a84741 100644 --- a/ru/codes/typescript/chapter_searching/binary_search_insertion.ts +++ b/ru/codes/typescript/chapter_searching/binary_search_insertion.ts @@ -4,13 +4,13 @@ * Author: Gaofer Chou (gaofer-chou@qq.com) */ -/* Бинарный поиск точки вставки (без повторяющихся элементов) */ +/* Двоичный поиск точки вставки (без повторяющихся элементов) */ function binarySearchInsertionSimple( nums: Array, target: number ): number { let i = 0, - j = nums.length - 1; // Инициализировать двусторонне замкнутый интервал [0, n-1] + j = nums.length - 1; // Инициализировать замкнутый интервал [0, n-1] while (i <= j) { const m = Math.floor(i + (j - i) / 2); // Вычислить индекс середины m, используя Math.floor() для округления вниз if (nums[m] < target) { @@ -18,17 +18,17 @@ function binarySearchInsertionSimple( } else if (nums[m] > target) { j = m - 1; // target находится в интервале [i, m-1] } else { - return m; // Найти target и вернуть точку вставки m + return m; // target найден, возвращается точка вставки m } } // target не найден, вернуть точку вставки i return i; } -/* Бинарный поиск точки вставки (с повторяющимися элементами) */ +/* Двоичный поиск точки вставки (с повторяющимися элементами) */ function binarySearchInsertion(nums: Array, target: number): number { let i = 0, - j = nums.length - 1; // Инициализировать двусторонне замкнутый интервал [0, n-1] + j = nums.length - 1; // Инициализировать замкнутый интервал [0, n-1] while (i <= j) { const m = Math.floor(i + (j - i) / 2); // Вычислить индекс середины m, используя Math.floor() для округления вниз if (nums[m] < target) { @@ -47,7 +47,7 @@ function binarySearchInsertion(nums: Array, target: number): number { // Массив без повторяющихся элементов let nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]; console.log('\nМассив nums = ' + nums); -// Бинарный поиск точки вставки +// Двоичный поиск точки вставки for (const target of [6, 9]) { const index = binarySearchInsertionSimple(nums, target); console.log('Индекс точки вставки элемента ' + target + ' = ' + index); @@ -56,7 +56,7 @@ for (const target of [6, 9]) { // Массив с повторяющимися элементами nums = [1, 3, 6, 6, 6, 6, 6, 10, 12, 15]; console.log('\nМассив nums = ' + nums); -// Бинарный поиск точки вставки +// Двоичный поиск точки вставки for (const target of [2, 6, 20]) { const index = binarySearchInsertion(nums, target); console.log('Индекс точки вставки элемента ' + target + ' = ' + index); diff --git a/ru/codes/typescript/chapter_searching/linear_search.ts b/ru/codes/typescript/chapter_searching/linear_search.ts index 3e513197a..8a5d44cd3 100644 --- a/ru/codes/typescript/chapter_searching/linear_search.ts +++ b/ru/codes/typescript/chapter_searching/linear_search.ts @@ -26,7 +26,7 @@ function linearSearchLinkedList( ): ListNode | null { // Обойти связный список while (head) { - // Найти целевой узел и вернуть его + // Целевой узел найден, возвращается этот узел if (head.val === target) { return head; } diff --git a/ru/codes/typescript/chapter_stack_and_queue/linkedlist_deque.ts b/ru/codes/typescript/chapter_stack_and_queue/linkedlist_deque.ts index 61b8d47bc..b3cb2ebfd 100644 --- a/ru/codes/typescript/chapter_stack_and_queue/linkedlist_deque.ts +++ b/ru/codes/typescript/chapter_stack_and_queue/linkedlist_deque.ts @@ -88,7 +88,7 @@ class LinkedListDeque { if (this.queSize === 0) { return null; } - const value: number = this.front.val; // Сохраняем значение головного узла + const value: number = this.front.val; // Сохранение значения головного узла // Если в очереди один элемент, начало и конец указывают на один узел if (this.queSize === 1) { this.front = null; diff --git a/ru/codes/zig/chapter_array_and_linkedlist/array.zig b/ru/codes/zig/chapter_array_and_linkedlist/array.zig index f36fd0365..81126c651 100644 --- a/ru/codes/zig/chapter_array_and_linkedlist/array.zig +++ b/ru/codes/zig/chapter_array_and_linkedlist/array.zig @@ -7,14 +7,14 @@ const utils = @import("utils"); // Случайный доступ к элементу pub fn randomAccess(nums: []const i32) i32 { - // Случайным образом выбрать целое число из интервала [0, nums.len) + // Случайный выбор целого числа из диапазона [0, nums.len) const random_index = std.crypto.random.intRangeLessThan(usize, 0, nums.len); // Получить и вернуть случайный элемент const randomNum = nums[random_index]; return randomNum; } -// Увеличить длину массива +// Увеличение длины массива pub fn extend(allocator: std.mem.Allocator, nums: []const i32, enlarge: usize) ![]i32 { // Инициализировать массив увеличенной длины const res = try allocator.alloc(i32, nums.len + enlarge); @@ -27,9 +27,9 @@ pub fn extend(allocator: std.mem.Allocator, nums: []const i32, enlarge: usize) ! return res; } -// Вставить элемент num по индексу index в массив +// Вставка элемента num в массив по индексу index pub fn insert(nums: []i32, num: i32, index: usize) void { - // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все последующие элементы на одну позицию вправо var i = nums.len - 1; while (i > index) : (i -= 1) { nums[i] = nums[i - 1]; @@ -38,9 +38,9 @@ pub fn insert(nums: []i32, num: i32, index: usize) void { nums[index] = num; } -// Удалить элемент по индексу index +// Удаление элемента по индексу index pub fn remove(nums: []i32, index: usize) void { - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево var i = index; while (i < nums.len - 1) : (i += 1) { nums[i] = nums[i + 1]; @@ -70,7 +70,7 @@ pub fn traverse(nums: []const i32) void { } } -// Найти заданный элемент в массиве +// Поиск заданного элемента в массиве pub fn find(nums: []i32, target: i32) i32 { for (nums, 0..) |num, i| { if (num == target) return @intCast(i); diff --git a/ru/codes/zig/chapter_array_and_linkedlist/linked_list.zig b/ru/codes/zig/chapter_array_and_linkedlist/linked_list.zig index e9e3acd54..d51e0df1f 100644 --- a/ru/codes/zig/chapter_array_and_linkedlist/linked_list.zig +++ b/ru/codes/zig/chapter_array_and_linkedlist/linked_list.zig @@ -6,14 +6,14 @@ const std = @import("std"); const utils = @import("utils"); const ListNode = utils.ListNode; -// Вставить узел P после узла n0 в связном списке +// Вставка узла P в связный список после узла n0 pub fn insert(comptime T: type, n0: *ListNode(T), P: *ListNode(T)) void { const n1 = n0.next; P.next = n1; n0.next = P; } -// Удалить первый узел после узла n0 в связном списке +// Удаление первого узла после узла n0 из связного списка pub fn remove(comptime T: type, n0: *ListNode(T)) void { // n0 -> P -> n1 => n0 -> n1 const P = n0.next; @@ -21,7 +21,7 @@ pub fn remove(comptime T: type, n0: *ListNode(T)) void { n0.next = n1; } -// Доступ к узлу связного списка по индексу index +// Доступ к узлу с индексом index в связном списке pub fn access(comptime T: type, node: *ListNode(T), index: i32) ?*ListNode(T) { var head: ?*ListNode(T) = node; var i: i32 = 0; @@ -35,7 +35,7 @@ pub fn access(comptime T: type, node: *ListNode(T), index: i32) ?*ListNode(T) { return head; } -// Найти в связном списке первый узел со значением target +// Поиск первого узла со значением target в связном списке pub fn find(comptime T: type, node: *ListNode(T), target: T) i32 { var head: ?*ListNode(T) = node; var index: i32 = 0; @@ -61,28 +61,38 @@ pub fn run() void { n2.next = &n3; n3.next = &n4; std.debug.print( - "Инициализированный связный список = {}\n",\n .{utils.fmt.linkedList(i32, &n0)},\n); + "Инициализированный связный список = {}\n", + .{utils.fmt.linkedList(i32, &n0)}, + ); // Вставка узла var tmp = ListNode(i32){ .val = 0 }; insert(i32, &n0, &tmp); std.debug.print( - "Связный список после вставки узла = {}\n",\n .{utils.fmt.linkedList(i32, &n0)},\n); + "Связный список после вставки узла = {}\n", + .{utils.fmt.linkedList(i32, &n0)}, + ); // Удаление узла remove(i32, &n0); std.debug.print( - "Связный список после удаления узла = {}\n",\n .{utils.fmt.linkedList(i32, &n0)},\n); + "Связный список после удаления узла = {}\n", + .{utils.fmt.linkedList(i32, &n0)}, + ); // Доступ к узлу const node = access(i32, &n0, 3); std.debug.print( - "Значение узла по индексу 3 в связном списке = {}\n",\n .{node.?.val},\n); + "Значение узла по индексу 3 в связном списке = {}\n", + .{node.?.val}, + ); // Поиск узла const index = find(i32, &n0, 2); std.debug.print( - "Индекс узла со значением 2 в связном списке = {}\n",\n .{index},\n); + "Индекс узла со значением 2 в связном списке = {}\n", + .{index}, + ); std.debug.print("\n", .{}); } diff --git a/ru/codes/zig/chapter_array_and_linkedlist/list.zig b/ru/codes/zig/chapter_array_and_linkedlist/list.zig index 819e5aa3f..129ff41eb 100644 --- a/ru/codes/zig/chapter_array_and_linkedlist/list.zig +++ b/ru/codes/zig/chapter_array_and_linkedlist/list.zig @@ -18,9 +18,9 @@ pub fn run() !void { const num = nums.items[1]; std.debug.print("Элемент по индексу 1: num = {}\n", .{num}); - // Обновление элемента + // Изменение элемента nums.items[1] = 0; - std.debug.print("После обновления элемента по индексу 1 до 0 nums = {}\n", .{utils.fmt.slice(nums.items)}); + std.debug.print("После изменения значения элемента с индексом 1 на 0 nums = {}\n", .{utils.fmt.slice(nums.items)}); // Очистить список nums.clearRetainingCapacity(); diff --git a/ru/codes/zig/chapter_array_and_linkedlist/my_list.zig b/ru/codes/zig/chapter_array_and_linkedlist/my_list.zig index 64af5de03..eb5ee85c3 100644 --- a/ru/codes/zig/chapter_array_and_linkedlist/my_list.zig +++ b/ru/codes/zig/chapter_array_and_linkedlist/my_list.zig @@ -35,7 +35,7 @@ const MyList = struct { const newlen = self.items.len + 1; try self.ensureTotalCapacity(newlen); - // Обновление элемента + // Изменение элемента self.items.len += 1; const new_item_ptr = &self.items[self.items.len - 1]; new_item_ptr.* = item; @@ -60,7 +60,7 @@ const MyList = struct { return self.items[index]; } - // Обновление элемента + // Изменение элемента pub fn set(self: *Self, index: usize, num: i32) void { // Если индекс выходит за границы, выбрасывается исключение; далее аналогично if (index < 0 or index >= self.items.len) { @@ -79,7 +79,7 @@ const MyList = struct { const newlen = self.items.len + 1; try self.ensureTotalCapacity(newlen); - // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию назад + // Сдвинуть элемент с индексом index и все следующие элементы на одну позицию вправо self.items.len += 1; var i = self.items.len - 1; while (i >= index) : (i -= 1) { @@ -93,7 +93,7 @@ const MyList = struct { if (index < 0 or index >= self.getSize()) { @panic("индекс выходит за границы"); } - // Сдвинуть все элементы после индекса index на одну позицию вперед + // Сдвинуть все элементы после индекса index на одну позицию влево const item = self.items[index]; var i = index; while (i < self.items.len - 1) : (i += 1) { @@ -175,26 +175,36 @@ pub fn run() !void { try nums.add(2); try nums.add(5); try nums.add(4); - std.debug.print("Список nums = {}, вместимость = {}, длина = {}\n", .{\n utils.fmt.slice(nums.items),\n nums.getCapacity(),\n nums.getSize(),\n}); + std.debug.print("Список nums = {}, вместимость = {}, длина = {}\n", .{ + utils.fmt.slice(nums.items), + nums.getCapacity(), + nums.getSize(), + }); // Вставка элемента в середину try nums.insert(3, 6); std.debug.print( - "После вставки числа 6 по индексу 3 получаем nums = {}\n",\n .{utils.fmt.slice(nums.items)},\n); + "После вставки числа 6 по индексу 3 получаем nums = {}\n", + .{utils.fmt.slice(nums.items)}, + ); // Удаление элемента _ = nums.remove(3); std.debug.print( - "После удаления элемента по индексу 3 получаем nums = {}\n",\n .{utils.fmt.slice(nums.items)},\n); + "После удаления элемента по индексу 3 получаем nums = {}\n", + .{utils.fmt.slice(nums.items)}, + ); // Доступ к элементу const num = nums.get(1); std.debug.print("Элемент по индексу 1: num = {}\n", .{num}); - // Обновление элемента + // Изменение элемента nums.set(1, 0); std.debug.print( - "После обновления элемента по индексу 1 значением 0 получаем nums = {}\n",\n .{utils.fmt.slice(nums.items)},\n); + "После изменения элемента по индексу 1 значением 0 получаем nums = {}\n", + .{utils.fmt.slice(nums.items)}, + ); // Проверка механизма расширения var i: i32 = 0; @@ -203,7 +213,13 @@ pub fn run() !void { try nums.add(i); } std.debug.print( - "Список nums после увеличения вместимости = {}, вместимость = {}, длина = {}\n",\n .{\n utils.fmt.slice(nums.items),\n nums.getCapacity(),\n nums.getSize(),\n },\n); + "Список nums после увеличения вместимости = {}, вместимость = {}, длина = {}\n", + .{ + utils.fmt.slice(nums.items), + nums.getCapacity(), + nums.getSize(), + }, + ); std.debug.print("\n", .{}); } diff --git a/ru/codes/zig/chapter_searching/binary_search.zig b/ru/codes/zig/chapter_searching/binary_search.zig index 183625f0b..19074c36a 100644 --- a/ru/codes/zig/chapter_searching/binary_search.zig +++ b/ru/codes/zig/chapter_searching/binary_search.zig @@ -5,9 +5,9 @@ const std = @import("std"); const inc = @import("include"); -// Бинарный поиск (двусторонне замкнутый интервал) +// Двоичный поиск (замкнутый интервал) fn binarySearch(comptime T: type, nums: std.ArrayList(T), target: T) T { - // Инициализировать двусторонне замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно + // Инициализировать замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно var i: usize = 0; var j: usize = nums.items.len - 1; // Цикл завершается, когда диапазон поиска пуст (при i > j диапазон пуст) @@ -25,9 +25,9 @@ fn binarySearch(comptime T: type, nums: std.ArrayList(T), target: T) T { return -1; } -// Бинарный поиск (лево замкнутый, право открытый интервал) +// Двоичный поиск (интервал, замкнутый слева и открытый справа) fn binarySearchLCRO(comptime T: type, nums: std.ArrayList(T), target: T) T { - // Инициализировать лево замкнутый, право открытый интервал [0, n), то есть i и j указывают на первый элемент массива и позицию сразу за последним элементом соответственно + // Инициализация интервала [0, n), замкнутого слева и открытого справа: i указывает на первый элемент массива, а j — на позицию сразу за последним var i: usize = 0; var j: usize = nums.items.len; // Цикл завершается, когда диапазон поиска пуст (при i = j диапазон пуст) @@ -52,11 +52,11 @@ pub fn main() !void { defer nums.deinit(); try nums.appendSlice(&[_]i32{ 1, 3, 6, 8, 12, 15, 23, 26, 31, 35 }); - // Бинарный поиск (двусторонне замкнутый интервал) + // Двоичный поиск (замкнутый интервал) var index = binarySearch(i32, nums, target); std.debug.print("Индекс целевого элемента 6 = {}\n", .{index}); - // Бинарный поиск (лево замкнутый, право открытый интервал) + // Двоичный поиск (интервал, замкнутый слева и открытый справа) index = binarySearchLCRO(i32, nums, target); std.debug.print("Индекс целевого элемента 6 = {}\n", .{index}); diff --git a/ru/codes/zig/chapter_searching/linear_search.zig b/ru/codes/zig/chapter_searching/linear_search.zig index 7e00af7b5..3e8593b77 100644 --- a/ru/codes/zig/chapter_searching/linear_search.zig +++ b/ru/codes/zig/chapter_searching/linear_search.zig @@ -9,7 +9,7 @@ const inc = @import("include"); fn linearSearchArray(comptime T: type, nums: std.ArrayList(T), target: T) T { // Обход массива for (nums.items, 0..) |num, i| { - // Найти целевой элемент и вернуть его индекс + // Целевой элемент найден, возвращается его индекс if (num == target) { return @intCast(i); } @@ -23,7 +23,7 @@ pub fn linearSearchLinkedList(comptime T: type, node: ?*inc.ListNode(T), target: var head = node; // Обойти связный список while (head != null) { - // Найти целевой узел и вернуть его + // Целевой узел найден, возвращается этот узел if (head.?.val == target) return head; head = head.?.next; } diff --git a/ru/docs/chapter_array_and_linkedlist/linked_list.md b/ru/docs/chapter_array_and_linkedlist/linked_list.md index 19b44b0d1..485201dab 100644 --- a/ru/docs/chapter_array_and_linkedlist/linked_list.md +++ b/ru/docs/chapter_array_and_linkedlist/linked_list.md @@ -67,7 +67,7 @@ Next *ListNode // Указатель на следующий узел } - // NewListNode Конструктор, создает новый узел + // NewListNode — функция-конструктор, создающая новый связный список. func NewListNode(val int) *ListNode { return &ListNode{ Val: val, @@ -195,7 +195,7 @@ ```python title="linked_list.py" # Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 - # Инициализация отдельных узлов + # Инициализация каждого узла n0 = ListNode(1) n1 = ListNode(3) n2 = ListNode(2) @@ -212,7 +212,7 @@ ```cpp title="linked_list.cpp" /* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */ - // Инициализация отдельных узлов + // Инициализация каждого узла ListNode* n0 = new ListNode(1); ListNode* n1 = new ListNode(3); ListNode* n2 = new ListNode(2); @@ -229,7 +229,7 @@ ```java title="linked_list.java" /* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */ - // Инициализация отдельных узлов + // Инициализация каждого узла ListNode n0 = new ListNode(1); ListNode n1 = new ListNode(3); ListNode n2 = new ListNode(2); @@ -246,7 +246,7 @@ ```csharp title="linked_list.cs" /* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */ - // Инициализация отдельных узлов + // Инициализация каждого узла ListNode n0 = new(1); ListNode n1 = new(3); ListNode n2 = new(2); @@ -263,7 +263,7 @@ ```go title="linked_list.go" /* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */ - // Инициализация отдельных узлов + // Инициализация каждого узла n0 := NewListNode(1) n1 := NewListNode(3) n2 := NewListNode(2) @@ -280,7 +280,7 @@ ```swift title="linked_list.swift" /* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */ - // Инициализация отдельных узлов + // Инициализация каждого узла let n0 = ListNode(x: 1) let n1 = ListNode(x: 3) let n2 = ListNode(x: 2) @@ -297,7 +297,7 @@ ```javascript title="linked_list.js" /* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */ - // Инициализация отдельных узлов + // Инициализация каждого узла const n0 = new ListNode(1); const n1 = new ListNode(3); const n2 = new ListNode(2); @@ -314,7 +314,7 @@ ```typescript title="linked_list.ts" /* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */ - // Инициализация отдельных узлов + // Инициализация каждого узла const n0 = new ListNode(1); const n1 = new ListNode(3); const n2 = new ListNode(2); @@ -331,7 +331,7 @@ ```dart title="linked_list.dart" /* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */\ - // Инициализация отдельных узлов + // Инициализация каждого узла ListNode n0 = ListNode(1); ListNode n1 = ListNode(3); ListNode n2 = ListNode(2); @@ -348,7 +348,7 @@ ```rust title="linked_list.rs" /* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */ - // Инициализация отдельных узлов + // Инициализация каждого узла let n0 = Rc::new(RefCell::new(ListNode { val: 1, next: None })); let n1 = Rc::new(RefCell::new(ListNode { val: 3, next: None })); let n2 = Rc::new(RefCell::new(ListNode { val: 2, next: None })); @@ -366,7 +366,7 @@ ```c title="linked_list.c" /* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */ - // Инициализация отдельных узлов + // Инициализация каждого узла ListNode* n0 = newListNode(1); ListNode* n1 = newListNode(3); ListNode* n2 = newListNode(2); @@ -383,7 +383,7 @@ ```kotlin title="linked_list.kt" /* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */ - // Инициализация отдельных узлов + // Инициализация каждого узла val n0 = ListNode(1) val n1 = ListNode(3) val n2 = ListNode(2) @@ -400,7 +400,7 @@ ```ruby title="linked_list.rb" # Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 - # Инициализация отдельных узлов + # Инициализация каждого узла n0 = ListNode.new(1) n1 = ListNode.new(3) n2 = ListNode.new(2) @@ -474,7 +474,7 @@ | Добавление элемента | $O(n)$ | $O(1)$ | | Удаление элемента | $O(n)$ | $O(1)$ | -## Основные типы связных списков +## Распространенные типы связных списков Как показано на рисунке ниже, существует три распространенных типа связных списков. @@ -538,7 +538,7 @@ Prev *DoublyListNode // Указатель на предыдущий узел } - // NewDoublyListNode Инициализация + // NewDoublyListNode инициализирует узел двусвязного списка. func NewDoublyListNode(val int) *DoublyListNode { return &DoublyListNode{ Val: val, @@ -680,7 +680,7 @@ end ``` -![Виды связных списков](linked_list.assets/linkedlist_common_types.png) +![Распространенные типы связных списков](linked_list.assets/linkedlist_common_types.png) ## Типичные применения связных списков diff --git a/ru/docs/chapter_array_and_linkedlist/list.md b/ru/docs/chapter_array_and_linkedlist/list.md index 3ee1dd3ce..479aa0d46 100644 --- a/ru/docs/chapter_array_and_linkedlist/list.md +++ b/ru/docs/chapter_array_and_linkedlist/list.md @@ -31,7 +31,7 @@ ```cpp title="list.cpp" /* Инициализация списка */ - // Обрати внимание: в C++ vector соответствует описываемому здесь nums + // Обратите внимание: в C++ vector соответствует описываемому здесь nums // Без начальных значений vector nums1; // С начальными значениями @@ -44,7 +44,7 @@ /* Инициализация списка */ // Без начальных значений List nums1 = new ArrayList<>(); - // С начальными значениями (обрати внимание: элементы массива должны использовать обертку Integer[] вместо int[]) + // С начальными значениями (обратите внимание: элементы массива должны использовать обертку Integer[] вместо int[]) Integer[] numbers = new Integer[] { 1, 3, 2, 5, 4 }; List nums = new ArrayList<>(Arrays.asList(numbers)); ``` @@ -153,7 +153,7 @@ ### Доступ к элементам -Поскольку в этом разделе список рассматривается как структура на основе динамического массива, доступ к элементам и их обновление можно выполнять за $O(1)$ времени, что очень эффективно. +Поскольку в этом разделе список рассматривается как структура на основе динамического массива, доступ к элементам и изменение их значений можно выполнять за $O(1)$ времени, что очень эффективно. === "Python" @@ -161,8 +161,8 @@ # Доступ к элементу num: int = nums[1] # Доступ к элементу по индексу 1 - # Обновление элемента - nums[1] = 0 # Обновить элемент по индексу 1 значением 0 + # Изменение элемента + nums[1] = 0 # Изменить значение элемента с индексом 1 на 0 ``` === "C++" @@ -171,8 +171,8 @@ /* Доступ к элементу */ int num = nums[1]; // Доступ к элементу по индексу 1 - /* Обновление элемента */ - nums[1] = 0; // Обновить элемент по индексу 1 значением 0 + /* Изменение элемента */ + nums[1] = 0; // Изменить значение элемента с индексом 1 на 0 ``` === "Java" @@ -181,8 +181,8 @@ /* Доступ к элементу */ int num = nums.get(1); // Доступ к элементу по индексу 1 - /* Обновление элемента */ - nums.set(1, 0); // Обновить элемент по индексу 1 значением 0 + /* Изменение элемента */ + nums.set(1, 0); // Изменить значение элемента с индексом 1 на 0 ``` === "C#" @@ -191,8 +191,8 @@ /* Доступ к элементу */ int num = nums[1]; // Доступ к элементу по индексу 1 - /* Обновление элемента */ - nums[1] = 0; // Обновить элемент по индексу 1 значением 0 + /* Изменение элемента */ + nums[1] = 0; // Изменить значение элемента с индексом 1 на 0 ``` === "Go" @@ -201,8 +201,8 @@ /* Доступ к элементу */ num := nums[1] // Доступ к элементу по индексу 1 - /* Обновление элемента */ - nums[1] = 0 // Обновить элемент по индексу 1 значением 0 + /* Изменение элемента */ + nums[1] = 0 // Изменить значение элемента с индексом 1 на 0 ``` === "Swift" @@ -211,8 +211,8 @@ /* Доступ к элементу */ let num = nums[1] // Доступ к элементу по индексу 1 - /* Обновление элемента */ - nums[1] = 0 // Обновить элемент по индексу 1 значением 0 + /* Изменение элемента */ + nums[1] = 0 // Изменить значение элемента с индексом 1 на 0 ``` === "JS" @@ -221,8 +221,8 @@ /* Доступ к элементу */ const num = nums[1]; // Доступ к элементу по индексу 1 - /* Обновление элемента */ - nums[1] = 0; // Обновить элемент по индексу 1 значением 0 + /* Изменение элемента */ + nums[1] = 0; // Изменить значение элемента с индексом 1 на 0 ``` === "TS" @@ -231,8 +231,8 @@ /* Доступ к элементу */ const num: number = nums[1]; // Доступ к элементу по индексу 1 - /* Обновление элемента */ - nums[1] = 0; // Обновить элемент по индексу 1 значением 0 + /* Изменение элемента */ + nums[1] = 0; // Изменить значение элемента с индексом 1 на 0 ``` === "Dart" @@ -241,8 +241,8 @@ /* Доступ к элементу */ int num = nums[1]; // Доступ к элементу по индексу 1 - /* Обновление элемента */ - nums[1] = 0; // Обновить элемент по индексу 1 значением 0 + /* Изменение элемента */ + nums[1] = 0; // Изменить значение элемента с индексом 1 на 0 ``` === "Rust" @@ -250,8 +250,8 @@ ```rust title="list.rs" /* Доступ к элементу */ let num: i32 = nums[1]; // Доступ к элементу по индексу 1 - /* Обновление элемента */ - nums[1] = 0; // Обновить элемент по индексу 1 значением 0 + /* Изменение элемента */ + nums[1] = 0; // Изменить значение элемента с индексом 1 на 0 ``` === "C" @@ -265,8 +265,8 @@ ```kotlin title="list.kt" /* Доступ к элементу */ val num = nums[1] // Доступ к элементу по индексу 1 - /* Обновление элемента */ - nums[1] = 0 // Обновить элемент по индексу 1 значением 0 + /* Изменение элемента */ + nums[1] = 0 // Изменить значение элемента с индексом 1 на 0 ``` === "Ruby" @@ -274,13 +274,13 @@ ```ruby title="list.rb" # Доступ к элементу num = nums[1] # Доступ к элементу по индексу 1 - # Обновление элемента - nums[1] = 0 # Обновить элемент по индексу 1 значением 0 + # Изменение элемента + nums[1] = 0 # Изменить значение элемента с индексом 1 на 0 ``` ??? pythontutor "Визуализация выполнения" - https://pythontutor.com/render.html#code=%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%0A%20%20%20%20%23%20%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C%20%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%20%D0%BA%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%83%0A%20%20%20%20num%20%3D%20nums%5B1%5D%20%20%23%20%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%B8%D1%82%D1%8C%D1%81%D1%8F%20%D0%BA%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%201%20%D0%BF%D0%BE%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%0A%0A%20%20%20%20%23%20%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%0A%20%20%20%20nums%5B1%5D%20%3D%200%20%20%20%20%23%20%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%201%20%D0%B4%D0%BE%200&cumulative=false&curInstr=3&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false + https://pythontutor.com/render.html#code=%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%0A%20%20%20%20%23%20%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C%20%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%20%D0%BA%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%83%0A%20%20%20%20num%20%3D%20nums%5B1%5D%20%20%23%20%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF%20%D0%BA%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%83%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%201%0A%0A%20%20%20%20%23%20%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%0A%20%20%20%20nums%5B1%5D%20%3D%200%20%20%20%20%23%20%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%D1%81%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%BE%D0%BC%201%20%D0%BD%D0%B0%200&cumulative=false&curInstr=3&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false ### Вставка и удаление элементов @@ -944,7 +944,7 @@ ??? pythontutor "Визуализация выполнения" - https://pythontutor.com/render.html#code=%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%20%20%20%20%0A%20%20%20%20%23%20%D0%9E%D1%82%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%0A%20%20%20%20nums.sort%28%29%20%20%23%20%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%2C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%80%D0%B0%D1%81%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D1%8B%20%D0%BF%D0%BE%20%D0%B2%D0%BE%D0%B7%D1%80%D0%B0%D1%81%D1%82%D0%B0%D0%BD%D0%B8%D1%8E&cumulative=false&curInstr=3&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false + https://pythontutor.com/render.html#code=%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%20%20%20%20%0A%20%20%20%20%23%20%D0%9E%D1%82%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%0A%20%20%20%20nums.sort%28%29%20%20%23%20%D0%9F%D0%BE%D1%81%D0%BB%D0%B5%20%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%20%D1%80%D0%B0%D1%81%D0%BF%D0%BE%D0%BB%D0%B0%D0%B3%D0%B0%D1%8E%D1%82%D1%81%D1%8F%20%D0%BF%D0%BE%20%D0%B2%D0%BE%D0%B7%D1%80%D0%B0%D1%81%D1%82%D0%B0%D0%BD%D0%B8%D1%8E&cumulative=false&curInstr=3&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false ## Реализация списка diff --git a/ru/docs/chapter_array_and_linkedlist/ram_and_cache.md b/ru/docs/chapter_array_and_linkedlist/ram_and_cache.md index 1850354f4..04098f9fd 100644 --- a/ru/docs/chapter_array_and_linkedlist/ram_and_cache.md +++ b/ru/docs/chapter_array_and_linkedlist/ram_and_cache.md @@ -14,9 +14,9 @@ | -------------- | --------------------------------------- | ----------------------------------------- | ------------------------------------------------------- | | Назначение | Долговременное хранение данных, включая ОС, программы, файлы и т.д. | Временное хранение выполняемых программ и обрабатываемых данных | Хранение часто используемых данных и инструкций, уменьшающее число обращений CPU к памяти | | Энергозависимость | Данные не теряются после отключения питания | Данные теряются после отключения питания | Данные теряются после отключения питания | -| Емкость | Большая, уровень TB | Меньшая, уровень GB | Очень малая, уровень MB | +| Емкость | Большая, на уровне TB | Меньшая, на уровне GB | Очень малая, на уровне MB | | Скорость | Низкая, от сотен до тысяч MB/s | Высокая, десятки GB/s | Очень высокая, десятки и сотни GB/s | -| Цена | Низкая, единицы валюты за GB | Высокая, десятки и сотни валютных единиц за GB | Очень высокая, входит в стоимость CPU | +| Цена (в китайских юанях) | Низкая, от нескольких десятых долей юаня до нескольких юаней за GB | Высокая, десятки и сотни юаней за GB | Очень высокая, входит в стоимость CPU | Компьютерную систему хранения можно представить в виде пирамиды, показанной на рисунке ниже. Чем ближе устройство хранения к вершине пирамиды, тем оно быстрее, тем меньше его емкость и тем выше его стоимость. Такая многоуровневая конструкция возникла не случайно, а стала результатом тщательных инженерных компромиссов. diff --git a/ru/docs/chapter_data_structure/basic_data_types.md b/ru/docs/chapter_data_structure/basic_data_types.md index 9a05a20a1..43f0f8904 100644 --- a/ru/docs/chapter_data_structure/basic_data_types.md +++ b/ru/docs/chapter_data_structure/basic_data_types.md @@ -31,7 +31,7 @@ | Символы | `char` | 2 байта | $0$ | $2^{16} - 1$ | $0$ | | Логические | `bool` | 1 байт | $\text{false}$ | $\text{true}$ | $\text{false}$ | -Обрати внимание: в таблице выше приведены данные именно для базовых типов данных Java. В каждом языке программирования свои определения типов, поэтому объем памяти, диапазон значений и значения по умолчанию могут различаться. +Обратите внимание: в таблице выше приведены данные именно для базовых типов данных Java. В каждом языке программирования свои определения типов, поэтому объем памяти, диапазон значений и значения по умолчанию могут различаться. - В Python целочисленный тип `int` может иметь произвольный размер, ограниченный только доступной памятью. Тип `float` является 64-битным числом двойной точности. Типа `char` нет, а отдельный символ на деле является строкой `str` длины 1. - В C и C++ размер базовых типов данных явно не зафиксирован и зависит от реализации и платформы. В таблице выше приведены данные для модели LP64 [data model](https://en.cppreference.com/w/cpp/language/types#Properties), используемой в 64-битных Unix-системах, включая Linux и macOS. diff --git a/ru/docs/chapter_data_structure/number_encoding.md b/ru/docs/chapter_data_structure/number_encoding.md index a5fb6c77d..f4fbfc12b 100644 --- a/ru/docs/chapter_data_structure/number_encoding.md +++ b/ru/docs/chapter_data_structure/number_encoding.md @@ -80,7 +80,7 @@ $$ Ты, вероятно, уже заметил, что все приведенные выше вычисления были операциями сложения. Это указывает на важный факт: **аппаратные схемы внутри компьютера в основном проектируются на основе операций сложения**. Причина в том, что сложение по сравнению с другими операциями (например умножением, делением и вычитанием) проще реализуется на аппаратном уровне, легче распараллеливается и выполняется быстрее. -Обрати внимание: это не означает, что компьютер умеет только складывать. **Комбинируя сложение с некоторыми базовыми логическими операциями, компьютер может реализовать и другие математические операции**. Например, вычитание $a - b$ можно преобразовать в сложение $a + (-b)$. Умножение и деление можно свести к многократному сложению или вычитанию. +Обратите внимание: это не означает, что компьютер умеет только складывать. **Комбинируя сложение с некоторыми базовыми логическими операциями, компьютер может реализовать и другие математические операции**. Например, вычитание $a - b$ можно преобразовать в сложение $a + (-b)$. Умножение и деление можно свести к многократному сложению или вычитанию. Теперь можно подвести итог, почему компьютеры используют дополнительный код: с представлением в дополнительном коде компьютер может использовать одни и те же схемы и операции для сложения положительных и отрицательных чисел, без необходимости проектировать специальные аппаратные схемы для вычитания и без особой обработки неоднозначности положительного и отрицательного нуля. Это значительно упрощает аппаратную архитектуру и повышает эффективность вычислений. diff --git a/ru/docs/chapter_hashing/hash_algorithm.md b/ru/docs/chapter_hashing/hash_algorithm.md index 7d54c759a..4495e21dd 100644 --- a/ru/docs/chapter_hashing/hash_algorithm.md +++ b/ru/docs/chapter_hashing/hash_algorithm.md @@ -35,7 +35,7 @@ index = hash(key) % capacity - **Устойчивость к коллизиям**: должно быть крайне трудно найти два разных входа, имеющих одинаковое хеш-значение. - **Эффект лавины**: даже небольшое изменение во входных данных должно приводить к заметному и непредсказуемому изменению результата. -Обрати внимание: **«равномерное распределение» и «устойчивость к коллизиям» - это два независимых понятия** , и выполнение первого не означает автоматического выполнения второго. Например, при случайном распределении входных `key` хеш-функция `key % 100` может выдавать достаточно равномерное распределение. Однако этот хеш-алгоритм слишком прост: все `key` с одинаковыми двумя последними цифрами будут иметь одинаковый результат, а значит, по хеш-значению можно легко подобрать подходящие `key` и, например, взломать пароль. +Обратите внимание: **«равномерное распределение» и «устойчивость к коллизиям» - это два независимых понятия** , и выполнение первого не означает автоматического выполнения второго. Например, при случайном распределении входных `key` хеш-функция `key % 100` может выдавать достаточно равномерное распределение. Однако этот хеш-алгоритм слишком прост: все `key` с одинаковыми двумя последними цифрами будут иметь одинаковый результат, а значит, по хеш-значению можно легко подобрать подходящие `key` и, например, взломать пароль. ## Проектирование хеш-алгоритма @@ -111,7 +111,7 @@ $$ !!! tip - Обрати внимание: определения и способы вычисления встроенных хеш-значений в разных языках программирования отличаются. + Обратите внимание: определения и способы вычисления встроенных хеш-значений в разных языках программирования отличаются. === "Python" diff --git a/ru/docs/chapter_hashing/hash_collision.md b/ru/docs/chapter_hashing/hash_collision.md index a6aabfc52..ef9a0a6b5 100644 --- a/ru/docs/chapter_hashing/hash_collision.md +++ b/ru/docs/chapter_hashing/hash_collision.md @@ -97,7 +97,7 @@ !!! tip - Обрати внимание: у хеш-таблиц с открытой адресацией (линейное пробирование, квадратичное пробирование и повторное хеширование) есть общая проблема: в них нельзя напрямую удалять элементы. + Обратите внимание: у хеш-таблиц с открытой адресацией (линейное пробирование, квадратичное пробирование и повторное хеширование) есть общая проблема: в них нельзя напрямую удалять элементы. ## Выбор в языках программирования diff --git a/ru/docs/chapter_searching/binary_search.md b/ru/docs/chapter_searching/binary_search.md index 2cbb4e4fd..1539c6a6a 100644 --- a/ru/docs/chapter_searching/binary_search.md +++ b/ru/docs/chapter_searching/binary_search.md @@ -55,7 +55,7 @@ ## Методы представления интервалов -Помимо описанного выше двойного замкнутого интервала, часто используется и левозамкнутый правооткрытый интервал, который задается как $[0, n)$ , то есть левая граница включается, а правая - нет. В этом представлении интервал $[i, j)$ пуст, когда $i = j$ . +Помимо описанного выше замкнутого интервала, часто используется и полуинтервал $[0, n)$, замкнутый слева и открытый справа , то есть левая граница включается, а правая - нет. В этом представлении интервал $[i, j)$ пуст, когда $i = j$ . На основе этого представления можно реализовать двоичный поиск с той же функциональностью: @@ -65,7 +65,7 @@ Как показано на рисунке ниже, в этих двух вариантах представления интервала различаются инициализация, условие цикла и операция сужения интервала в алгоритме двоичного поиска. -Поскольку в записи «двойной замкнутый интервал» обе границы являются закрытыми, операции сужения интервала при помощи указателей $i$ и $j$ тоже получаются симметричными. Из-за этого в таком варианте сложнее допустить ошибку, **поэтому обычно рекомендуется использовать именно запись «двойной замкнутый интервал»**. +Поскольку в записи «замкнутый интервал» обе границы являются закрытыми, операции сужения интервала при помощи указателей $i$ и $j$ тоже получаются симметричными. Из-за этого в таком варианте сложнее допустить ошибку, **поэтому обычно рекомендуется использовать именно запись «замкнутый интервал»**. ![Два определения интервалов](binary_search.assets/binary_search_ranges.png) diff --git a/ru/docs/chapter_searching/binary_search_insertion.md b/ru/docs/chapter_searching/binary_search_insertion.md index 839f5e4b1..58afaf024 100644 --- a/ru/docs/chapter_searching/binary_search_insertion.md +++ b/ru/docs/chapter_searching/binary_search_insertion.md @@ -84,7 +84,7 @@ !!! tip - Код в этом разделе записан в стиле «двойного замкнутого интервала». При желании можно самостоятельно реализовать вариант «слева закрыт, справа открыт». + Код в этом разделе записан в стиле «замкнутого интервала». При желании можно самостоятельно реализовать вариант «слева закрыт, справа открыт». Если смотреть в целом, суть двоичного поиска сводится к тому, что для указателей $i$ и $j$ заранее задаются ориентиры поиска. Целью может быть конкретный элемент, например `target` , а может быть и диапазон элементов, например все элементы, меньшие `target` . diff --git a/ru/docs/chapter_searching/exercises.md b/ru/docs/chapter_searching/exercises.md index cc956c591..23be0b1a1 100644 --- a/ru/docs/chapter_searching/exercises.md +++ b/ru/docs/chapter_searching/exercises.md @@ -5,7 +5,7 @@ ### Как двоичный поиск сужает область поиска Найдите число 16 в упорядоченном массиве `[2, 5, 8, 12, 16, 23, 38]`. -Используйте двойной замкнутый интервал `[i, j]` и середину +Используйте замкнутый интервал `[i, j]` и середину $m=i+(j-i)/2$ с округлением вниз. Для каждой итерации запишите `(i, j, m)`, средний элемент и способ дальнейшего сужения интервала, @@ -42,7 +42,7 @@ $m=i+(j-i)/2$ с округлением вниз. Левая граница в этом массиве имеет индекс 1, а правая — индекс 3. 2. При поиске левой границы, даже если средний элемент равен 2, нужно продолжить поиск слева, - например, при двойном замкнутом интервале присвоить `j = m - 1`. + например, при замкнутом интервале присвоить `j = m - 1`. 3. При поиске правой границы после совпадения среднего элемента с 2 нужно продолжить поиск справа, например, присвоить `i = m + 1`. @@ -89,7 +89,7 @@ $m=i+(j-i)/2$ с округлением вниз. ??? tip "Подсказки" 1. Ответ может быть равен 0 или длине массива n - 2. При двойном замкнутом интервале, если `nums[mid]` больше или равно `target`, присвойте `right = mid - 1` и продолжите проверять позиции левее; иначе присвойте `left = mid + 1` + 2. При замкнутом интервале, если `nums[mid]` больше или равно `target`, присвойте `right = mid - 1` и продолжите проверять позиции левее; иначе присвойте `left = mid + 1` 3. После завершения цикла left будет позицией вставки [LeetCode](https://leetcode.com/problems/search-insert-position/){ .rounded-button .exercise-button target="_blank" rel="noopener noreferrer" } diff --git a/ru/docs/chapter_searching/replace_linear_by_hashing.md b/ru/docs/chapter_searching/replace_linear_by_hashing.md index 2271157b3..50114681d 100644 --- a/ru/docs/chapter_searching/replace_linear_by_hashing.md +++ b/ru/docs/chapter_searching/replace_linear_by_hashing.md @@ -1,4 +1,4 @@ -# Стратегии оптимизации хеширования +# Стратегии оптимизации с помощью хеширования В алгоритмических задачах **мы часто заменяем линейный поиск на хеш-поиск, чтобы уменьшить временную сложность алгоритма**. Разберем одну задачу, чтобы лучше понять этот прием. diff --git a/ru/docs/chapter_searching/searching_algorithm_revisited.md b/ru/docs/chapter_searching/searching_algorithm_revisited.md index 076be94ba..aa10765f3 100644 --- a/ru/docs/chapter_searching/searching_algorithm_revisited.md +++ b/ru/docs/chapter_searching/searching_algorithm_revisited.md @@ -52,8 +52,8 @@ | Вставка элемента | $O(1)$ | $O(n)$ | $O(\log n)$ | $O(1)$ | | Удаление элемента | $O(n)$ | $O(n)$ | $O(\log n)$ | $O(1)$ | | Дополнительное пространство | $O(1)$ | $O(1)$ | $O(n)$ | $O(n)$ | -| Предварительная обработка | / | Сортировка $O(n \log n)$ | Построение дерева $O(n \log n)$ | Построение хеш-таблицы $O(n)$ | -| Упорядоченность данных | Не требуется | Требуется | Требуется | Не требуется | +| Предварительная обработка | Не требуется | Сортировка $O(n \log n)$ | Построение дерева $O(n \log n)$ | Построение хеш-таблицы $O(n)$ | +| Упорядоченность данных | Неупорядоченные | Упорядоченные | Упорядоченные | Неупорядоченные | Выбор алгоритма поиска также зависит от масштаба данных, требований к производительности поиска, а также частоты запросов и обновлений данных. diff --git a/ru/docs/chapter_stack_and_queue/deque.md b/ru/docs/chapter_stack_and_queue/deque.md index 47f0b3700..6ac6db531 100644 --- a/ru/docs/chapter_stack_and_queue/deque.md +++ b/ru/docs/chapter_stack_and_queue/deque.md @@ -206,7 +206,7 @@ deque.push(2); deque.push(5); deque.push(4); - // Обрати внимание: поскольку это массив, метод unshift() имеет сложность O(n) + // Обратите внимание: поскольку это массив, метод unshift() имеет сложность O(n) deque.unshift(3); deque.unshift(1); @@ -215,7 +215,7 @@ const peekLast = deque[deque.length - 1]; /* Извлечь элементы из очереди */ - // Обрати внимание: поскольку это массив, метод shift() имеет сложность O(n) + // Обратите внимание: поскольку это массив, метод shift() имеет сложность O(n) const popFront = deque.shift(); const popBack = deque.pop(); @@ -237,7 +237,7 @@ deque.push(2); deque.push(5); deque.push(4); - // Обрати внимание: поскольку это массив, метод unshift() имеет сложность O(n) + // Обратите внимание: поскольку это массив, метод unshift() имеет сложность O(n) deque.unshift(3); deque.unshift(1); @@ -246,7 +246,7 @@ const peekLast: number = deque[deque.length - 1]; /* Извлечь элементы из очереди */ - // Обрати внимание: поскольку это массив, метод shift() имеет сложность O(n) + // Обратите внимание: поскольку это массив, метод shift() имеет сложность O(n) const popFront: number = deque.shift() as number; const popBack: number = deque.pop() as number; @@ -363,7 +363,7 @@ deque << 2 deque << 5 deque << 4 - # Обрати внимание: поскольку это массив, метод Array#unshift имеет сложность O(n) + # Обратите внимание: поскольку это массив, метод Array#unshift имеет сложность O(n) deque.unshift(3) deque.unshift(1) @@ -372,7 +372,7 @@ peek_last = deque.last # Извлечь элементы из очереди - # Обрати внимание: поскольку это массив, метод Array#shift имеет сложность O(n) + # Обратите внимание: поскольку это массив, метод Array#shift имеет сложность O(n) pop_front = deque.shift pop_back = deque.pop @@ -449,4 +449,4 @@ Двусторонняя очередь сочетает в себе логику стека и очереди, **поэтому она может покрыть все сценарии применения обеих структур и при этом предоставляет более высокую степень свободы**. -Мы знаем, что функция «undo» в программном обеспечении обычно реализуется с помощью стека: система помещает каждое изменение в стек с помощью `push` , а затем использует `pop` для отмены. Однако, учитывая ограниченность системных ресурсов, программы обычно ограничивают число шагов отмены, например разрешают хранить только $50$ шагов. Когда длина стека превышает этот предел, программе нужно удалить элемент с дна стека, то есть с головы очереди. **Но стек не может реализовать такую операцию, и в этом случае его приходится заменять двусторонней очередью**. Обрати внимание: основная логика «undo» по-прежнему следует стековому правилу LIFO, просто двусторонняя очередь позволяет более гибко реализовать некоторые дополнительные механизмы. +Мы знаем, что функция «undo» в программном обеспечении обычно реализуется с помощью стека: система помещает каждое изменение в стек с помощью `push` , а затем использует `pop` для отмены. Однако, учитывая ограниченность системных ресурсов, программы обычно ограничивают число шагов отмены, например разрешают хранить только $50$ шагов. Когда длина стека превышает этот предел, программе нужно удалить элемент с дна стека, то есть с головы очереди. **Но стек не может реализовать такую операцию, и в этом случае его приходится заменять двусторонней очередью**. Обратите внимание: основная логика «undo» по-прежнему следует стековому правилу LIFO, просто двусторонняя очередь позволяет более гибко реализовать некоторые дополнительные механизмы. diff --git a/ru/docs/chapter_stack_and_queue/queue.md b/ru/docs/chapter_stack_and_queue/queue.md index 9d8fd9e57..118e3f6d6 100644 --- a/ru/docs/chapter_stack_and_queue/queue.md +++ b/ru/docs/chapter_stack_and_queue/queue.md @@ -346,7 +346,7 @@ peek = queue.first # Извлечь элемент из очереди - # Обрати внимание: поскольку это массив, метод Array#shift имеет сложность O(n) + # Обратите внимание: поскольку это массив, метод Array#shift имеет сложность O(n) pop = queue.shift # Получить длину очереди diff --git a/ru/mkdocs.yml b/ru/mkdocs.yml index 4df573a47..62701748d 100644 --- a/ru/mkdocs.yml +++ b/ru/mkdocs.yml @@ -126,7 +126,7 @@ nav: - 10.1 Двоичный поиск: chapter_searching/binary_search.md - 10.2 Двоичный поиск точки вставки: chapter_searching/binary_search_insertion.md - 10.3 Двоичный поиск границ: chapter_searching/binary_search_edge.md - - 10.4 Стратегии оптимизации хеширования: chapter_searching/replace_linear_by_hashing.md + - 10.4 Стратегии оптимизации с помощью хеширования: chapter_searching/replace_linear_by_hashing.md - 10.5 Переосмысление алгоритмов поиска: chapter_searching/searching_algorithm_revisited.md - 10.6 Резюме: chapter_searching/summary.md - 10.7 Упражнения: chapter_searching/exercises.md