fix(ru): align proofreading corrections with the Simplified Chinese original (#2004)

* docs(ru): correct proofreading issues in prose and code examples

* docs(ru): align proofreading edits with Simplified Chinese source

* fix(ru): repair generated Zig statements and complete comment translations
This commit is contained in:
Yudong Jin
2026-10-27 18:19:11 +08:00
committed by GitHub
parent 350f483801
commit 71a773df64
149 changed files with 675 additions and 649 deletions

View File

@@ -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));
/* Инициализация массива */

View File

@@ -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) {

View File

@@ -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));
/* Проверка механизма расширения */

View File

@@ -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);

View File

@@ -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);

View File

@@ -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]);

View File

@@ -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]);

View File

@@ -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;
}

View File

@@ -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)

View File

@@ -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) {

View File

@@ -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);
/* Очистить список */

View File

@@ -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);

View File

@@ -6,7 +6,7 @@
#include "../utils/common.hpp"
/* Бинарный поиск: задача f(i, j) */
/* Двоичный поиск: задача f(i, j) */
int dfs(vector<int> &nums, int target, int i, int j) {
// Если интервал пуст, целевой элемент отсутствует, вернуть -1
if (i > j) {
@@ -26,7 +26,7 @@ int dfs(vector<int> &nums, int target, int i, int j) {
}
}
/* Бинарный поиск */
/* Двоичный поиск */
int binarySearch(vector<int> &nums, int target) {
int n = nums.size();
// Решить задачу f(0, n-1)
@@ -38,7 +38,7 @@ int main() {
int target = 6;
vector<int> nums = {1, 3, 6, 8, 12, 15, 23, 26, 31, 35};
// Бинарный поиск (двусторонне замкнутый интервал)
// Двоичный поиск (замкнутый интервал)
int index = binarySearch(nums, target);
cout << "Индекс целевого элемента 6 = " << index << endl;

View File

@@ -6,9 +6,9 @@
#include "../utils/common.hpp"
/* Бинарный поиск (двусторонне замкнутый интервал) */
/* Двоичный поиск (замкнутый интервал) */
int binarySearch(vector<int> &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<int> &nums, int target) {
return -1;
}
/* Бинарный поиск (лево замкнутый, право открытый интервал) */
/* Двоичный поиск (интервал, замкнутый слева и открытый справа) */
int binarySearchLCRO(vector<int> &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<int> 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;

View File

@@ -6,9 +6,9 @@
#include "../utils/common.hpp"
/* Бинарный поиск точки вставки (с повторяющимися элементами) */
/* Двоичный поиск точки вставки (с повторяющимися элементами) */
int binarySearchInsertion(const vector<int> &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<int> &nums, int target) {
return i;
}
/* Бинарный поиск самого левого target */
/* Двоичный поиск самого левого элемента target */
int binarySearchLeftEdge(vector<int> &nums, int target) {
// Эквивалентно поиску точки вставки target
int i = binarySearchInsertion(nums, target);
@@ -29,11 +29,11 @@ int binarySearchLeftEdge(vector<int> &nums, int target) {
if (i == nums.size() || nums[i] != target) {
return -1;
}
// Найти target и вернуть индекс i
// target найден, возвращается индекс i
return i;
}
/* Бинарный поиск самого правого target */
/* Двоичный поиск самого правого элемента target */
int binarySearchRightEdge(vector<int> &nums, int target) {
// Преобразовать задачу в поиск самого левого target + 1
int i = binarySearchInsertion(nums, target + 1);
@@ -43,7 +43,7 @@ int binarySearchRightEdge(vector<int> &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;

View File

@@ -6,9 +6,9 @@
#include "../utils/common.hpp"
/* Бинарный поиск точки вставки (без повторяющихся элементов) */
/* Двоичный поиск точки вставки (без повторяющихся элементов) */
int binarySearchInsertionSimple(vector<int> &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<int> &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<int> &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<int> 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;

View File

@@ -22,7 +22,7 @@ int linearSearchArray(vector<int> &nums, int target) {
ListNode *linearSearchLinkedList(ListNode *head, int target) {
// Обойти связный список
while (head != nullptr) {
// Найти целевой узел и вернуть его
// Целевой узел найден, возвращается этот узел
if (head->val == target)
return head;
head = head->next;

View File

@@ -87,7 +87,7 @@ class LinkedListDeque {
// Если в очереди один элемент, начало и конец указывают на один узел
if (queSize == 1) {
val = front->val;
delete front; // Освобождаем общий узел один раз
delete front; // Оба указателя указывают на один узел, поэтому достаточно освободить его один раз
front = nullptr;
rear = nullptr;
}

View File

@@ -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)

View File

@@ -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) {

View File

@@ -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();

View File

@@ -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++) {

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;

View File

@@ -10,14 +10,14 @@ import 'dart:math';
/* Случайный доступ к элементу */
int randomAccess(List<int> nums) {
// Случайным образом выбрать число из интервала [0, nums.length)
// Случайный выбор числа из диапазона [0, nums.length)
int randomIndex = Random().nextInt(nums.length);
// Получить и вернуть случайный элемент
int randomNum = nums[randomIndex];
return randomNum;
}
/* Увеличить длину массива */
/* Увеличение длины массива */
List<int> extend(List<int> nums, int enlarge) {
// Инициализировать массив увеличенной длины
List<int> res = List.filled(nums.length + enlarge, 0);
@@ -29,9 +29,9 @@ List<int> extend(List<int> nums, int enlarge) {
return res;
}
/* Вставить элемент _num по индексу index в массив */
/* Вставка элемента _num в массив по индексу index */
void insert(List<int> 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<int> nums, int _num, int index) {
nums[index] = _num;
}
/* Удалить элемент по индексу index */
/* Удаление элемента по индексу index */
void remove(List<int> 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<int> nums) {
});
}
/* Найти заданный элемент в массиве */
/* Поиск заданного элемента в массиве */
int find(List<int> nums, int target) {
for (var i = 0; i < nums.length; i++) {
if (nums[i] == target) return i;

View File

@@ -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) {

View File

@@ -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();

View File

@@ -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++) {

View File

@@ -4,7 +4,7 @@
* Author: liuyuxin (gvenusleo@gmail.com)
*/
/* Бинарный поиск: задача f(i, j) */
/* Двоичный поиск: задача f(i, j) */
int dfs(List<int> nums, int target, int i, int j) {
// Если интервал пуст, целевой элемент отсутствует, вернуть -1
if (i > j) {
@@ -24,7 +24,7 @@ int dfs(List<int> nums, int target, int i, int j) {
}
}
/* Бинарный поиск */
/* Двоичный поиск */
int binarySearch(List<int> nums, int target) {
int n = nums.length;
// Решить задачу f(0, n-1)
@@ -36,7 +36,7 @@ void main() {
int target = 6;
List<int> nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35];
// Бинарный поиск (двусторонне замкнутый интервал)
// Двоичный поиск (замкнутый интервал)
int index = binarySearch(nums, target);
print("Индекс целевого элемента 6 = $index");
}

View File

@@ -4,9 +4,9 @@
* Author: Jefferson (JeffersonHuang77@gmail.com)
*/
/* Бинарный поиск (двусторонне замкнутый интервал) */
/* Двоичный поиск (замкнутый интервал) */
int binarySearch(List<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) {
@@ -26,9 +26,9 @@ int binarySearch(List<int> nums, int target) {
return -1;
}
/* Бинарный поиск (лево замкнутый, право открытый интервал) */
/* Двоичный поиск (интервал, замкнутый слева и открытый справа) */
int binarySearchLCRO(List<int> 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');
}

View File

@@ -6,7 +6,7 @@
import 'binary_search_insertion.dart';
/* Бинарный поиск самого левого target */
/* Двоичный поиск самого левого элемента target */
int binarySearchLeftEdge(List<int> nums, int target) {
// Эквивалентно поиску точки вставки target
int i = binarySearchInsertion(nums, target);
@@ -14,11 +14,11 @@ int binarySearchLeftEdge(List<int> nums, int target) {
if (i == nums.length || nums[i] != target) {
return -1;
}
// Найти target и вернуть индекс i
// target найден, возвращается индекс i
return i;
}
/* Бинарный поиск самого правого target */
/* Двоичный поиск самого правого элемента target */
int binarySearchRightEdge(List<int> nums, int target) {
// Преобразовать задачу в поиск самого левого target + 1
int i = binarySearchInsertion(nums, target + 1);
@@ -28,7 +28,7 @@ int binarySearchRightEdge(List<int> nums, int target) {
if (j == -1 || nums[j] != target) {
return -1;
}
// Найти target и вернуть индекс j
// target найден, возвращается индекс j
return j;
}
@@ -38,7 +38,7 @@ void main() {
List<int> 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");

View File

@@ -4,9 +4,9 @@
* Author: liuyuxin (gvenusleo@gmail.com)
*/
/* Бинарный поиск точки вставки (без повторяющихся элементов) */
/* Двоичный поиск точки вставки (без повторяющихся элементов) */
int binarySearchInsertionSimple(List<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) {
@@ -14,16 +14,16 @@ int binarySearchInsertionSimple(List<int> 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<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) {
@@ -43,7 +43,7 @@ void main() {
// Массив без повторяющихся элементов
List<int> 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");

View File

@@ -23,7 +23,7 @@ int linearSearchArray(List<int> nums, int target) {
ListNode? linearSearchList(ListNode? head, int target) {
// Обойти связный список
while (head != null) {
// Найти целевой узел и вернуть его
// Целевой узел найден, возвращается этот узел
if (head.val == target) return head;
head = head.next;
}

View File

@@ -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++ {

View File

@@ -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 {

View File

@@ -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

View File

@@ -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]
}

View File

@@ -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++ {

View File

@@ -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)

View File

@@ -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 {

View File

@@ -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
}

View File

@@ -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

View File

@@ -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)

View File

@@ -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
}

View File

@@ -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)

View File

@@ -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) {

View File

@@ -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();

View File

@@ -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++) {

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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++) {

View File

@@ -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}`);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -23,7 +23,7 @@ function linearSearchArray(nums, target) {
function linearSearchLinkedList(head, target) {
// Обойти связный список
while (head) {
// Найти целевой узел и вернуть его
// Целевой узел найден, возвращается этот узел
if (head.val === target) {
return head;
}

View File

@@ -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;

View File

@@ -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..<nums.size - 1) {
nums[i] = nums[i + 1]
}
@@ -60,7 +60,7 @@ fun traverse(nums: IntArray) {
}
}
/* Найти заданный элемент в массиве */
/* Поиск заданного элемента в массиве */
fun find(nums: IntArray, target: Int): Int {
for (i in nums.indices) {
if (nums[i] == target)

View File

@@ -9,14 +9,14 @@ package chapter_array_and_linkedlist
import utils.ListNode
import utils.printLinkedList
/* Вставить узел P после узла n0 в связном списке */
/* Вставка узла P в связный список после узла n0 */
fun insert(n0: ListNode?, p: ListNode?) {
val n1 = n0?.next
p?.next = n1
n0?.next = p
}
/* Удалить первый узел после узла n0 в связном списке */
/* Удаление первого узла после узла n0 из связного списка */
fun remove(n0: ListNode?) {
if (n0?.next == null)
return
@@ -26,7 +26,7 @@ fun remove(n0: ListNode?) {
n0.next = n1
}
/* Доступ к узлу связного списка по индексу index */
/* Доступ к узлу с индексом index в связном списке */
fun access(head: ListNode?, index: Int): ListNode? {
var h = head
for (i in 0..<index) {
@@ -37,7 +37,7 @@ fun access(head: ListNode?, index: Int): ListNode? {
return h
}
/* Найти в связном списке первый узел со значением target */
/* Поиск первого узла со значением target в связном списке */
fun find(head: ListNode?, target: Int): Int {
var index = 0
var h = head

View File

@@ -17,9 +17,9 @@ fun main() {
val num = nums[1]
println("Элемент по индексу 1: num = $num")
/* Обновление элемента */
/* Изменение элемента */
nums[1] = 0
println("После обновления элемента по индексу 1 до 0 nums = $nums")
println("После изменения значения элемента с индексом 1 на 0 nums = $nums")
/* Очистить список */
nums.clear()

View File

@@ -36,7 +36,7 @@ class MyList {
return arr[index]
}
/* Обновление элемента */
/* Изменение элемента */
fun set(index: Int, num: Int) {
if (index < 0 || 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..<size - 1)
arr[j] = arr[j + 1]
// Обновить число элементов
@@ -126,9 +126,9 @@ fun main() {
val num = nums.get(1)
println("Элемент по индексу 1: num = $num")
/* Обновление элемента */
/* Изменение элемента */
nums.set(1, 0)
println("После обновления элемента по индексу 1 до 0 nums = ${nums.toArray().contentToString()}")
println("После изменения значения элемента с индексом 1 на 0 nums = ${nums.toArray().contentToString()}")
/* Проверка механизма расширения */
for (i in 0..9) {

View File

@@ -6,7 +6,7 @@
package chapter_divide_and_conquer.binary_search_recur
/* Бинарный поиск: задача f(i, j) */
/* Двоичный поиск: задача f(i, j) */
fun dfs(
nums: IntArray,
target: Int,
@@ -31,7 +31,7 @@ fun dfs(
}
}
/* Бинарный поиск */
/* Двоичный поиск */
fun binarySearch(nums: IntArray, target: Int): Int {
val n = nums.size
// Решить задачу f(0, n-1)
@@ -43,7 +43,7 @@ fun main() {
val target = 6
val nums = intArrayOf(1, 3, 6, 8, 12, 15, 23, 26, 31, 35)
// Бинарный поиск (двусторонне замкнутый интервал)
// Двоичный поиск (замкнутый интервал)
val index = binarySearch(nums, target)
println("Индекс целевого элемента 6 = $index")
}

View File

@@ -6,9 +6,9 @@
package chapter_searching
/* Бинарный поиск (двусторонне замкнутый интервал) */
/* Двоичный поиск (замкнутый интервал) */
fun binarySearch(nums: IntArray, target: Int): Int {
// Инициализировать двусторонне замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно
// Инициализировать замкнутый интервал [0, n-1], то есть i и j указывают на первый и последний элементы массива соответственно
var i = 0
var j = nums.size - 1
// Цикл завершается, когда диапазон поиска пуст (при i > 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")
}

View File

@@ -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")

View File

@@ -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")

View File

@@ -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

View File

@@ -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

View File

@@ -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:

View File

@@ -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()

View File

@@ -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):

View File

@@ -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)

View File

@@ -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)

View File

@@ -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}")

View File

@@ -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}")

View File

@@ -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

View File

@@ -5,19 +5,19 @@
--->
<!-- [file]{array}-[class]{}-[func]{random_access} -->
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
<!-- [file]{array}-[class]{}-[func]{insert} -->
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
<!-- [file]{array}-[class]{}-[func]{remove} -->
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
<!-- [file]{array}-[class]{}-[func]{traverse} -->
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
<!-- [file]{array}-[class]{}-[func]{find} -->
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
<!-- [file]{array}-[class]{}-[func]{extend} -->
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

View File

@@ -5,13 +5,13 @@
--->
<!-- [file]{linked_list}-[class]{}-[func]{insert} -->
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
<!-- [file]{linked_list}-[class]{}-[func]{remove} -->
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
<!-- [file]{linked_list}-[class]{}-[func]{access} -->
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
<!-- [file]{linked_list}-[class]{}-[func]{find} -->
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

View File

@@ -5,4 +5,4 @@
--->
<!-- [file]{binary_search_recur}-[class]{}-[func]{binary_search} -->
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

View File

@@ -5,7 +5,7 @@
--->
<!-- [file]{binary_search}-[class]{}-[func]{binary_search} -->
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
<!-- [file]{binary_search}-[class]{}-[func]{binary_search_lcro} -->
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

View File

@@ -5,7 +5,7 @@
--->
<!-- [file]{binary_search_edge}-[class]{}-[func]{binary_search_left_edge} -->
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
<!-- [file]{binary_search_edge}-[class]{}-[func]{binary_search_right_edge} -->
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

View File

@@ -5,7 +5,7 @@
--->
<!-- [file]{binary_search_insertion}-[class]{}-[func]{binary_search_insertion_simple} -->
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
<!-- [file]{binary_search_insertion}-[class]{}-[func]{binary_search_insertion} -->
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

View File

@@ -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

View File

@@ -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?

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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}"

View File

@@ -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}"

View File

@@ -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

View File

@@ -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<i32> {
// Инициализировать массив увеличенной длины
let mut res: Vec<i32> = vec![0; nums.len() + enlarge];
@@ -27,9 +27,9 @@ fn extend(nums: &[i32], enlarge: usize) -> Vec<i32> {
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<usize> {
for i in 0..nums.len() {
if nums[i] == target {

Some files were not shown because too many files have changed in this diff Show More