mirror of
https://github.com/krahets/hello-algo.git
synced 2026-08-28 10:57:15 +00:00
build
This commit is contained in:
@@ -486,7 +486,7 @@ comments: true
|
||||
|
||||
### 2. Преобразование в поиск элемента
|
||||
|
||||
Мы знаем, что если массив не содержит `target` , то в конце поиска указатели $i$ и $j$ будут указывать соответственно на первый элемент, больший `target` , и на первый элемент, меньший `target` .
|
||||
Мы знаем, что если массив не содержит `target` , то в конце поиска указатели $i$ и $j$ будут указывать соответственно на первый элемент, больший `target` , и на самый правый элемент, меньший `target` .
|
||||
|
||||
Следовательно, как показано на рисунке 10-8, для поиска левой и правой границы можно сконструировать элемент, которого нет в массиве.
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ comments: true
|
||||
|
||||
Рассмотрим процесс двоичного поиска подробнее: когда `nums[m] < target` , указатель $i$ сдвигается вправо и тем самым приближается к элементу, который больше либо равен `target` . Аналогично указатель $j$ постепенно приближается к элементу, который меньше либо равен `target` .
|
||||
|
||||
Следовательно, после завершения двоичного поиска обязательно выполняется следующее: указатель $i$ указывает на первый элемент, больший `target` , а указатель $j$ указывает на первый элемент, меньший `target` . **Нетрудно сделать вывод, что если массив не содержит `target` , то индекс вставки равен $i$** . Код приведен ниже:
|
||||
Следовательно, после завершения двоичного поиска обязательно выполняется следующее: указатель $i$ указывает на первый элемент, больший `target` , а указатель $j$ указывает на самый правый элемент, меньший `target` . **Нетрудно сделать вывод, что если массив не содержит `target` , то индекс вставки равен $i$** . Код приведен ниже:
|
||||
|
||||
=== "Python"
|
||||
|
||||
@@ -344,7 +344,7 @@ comments: true
|
||||
- Когда `nums[m] < target` или `nums[m] > target` , это означает, что `target` еще не найден, поэтому используется стандартная операция сужения интервала в двоичном поиске, **благодаря чему указатели $i$ и $j$ приближаются к `target`**.
|
||||
- Когда `nums[m] == target` , это означает, что элементы меньше `target` находятся в интервале $[i, m - 1]$ , поэтому мы используем $j = m - 1$ для сужения интервала, **тем самым приближая указатель $j$ к элементам, меньшим `target`**.
|
||||
|
||||
После завершения цикла указатель $i$ будет указывать на самый левый `target` , а указатель $j$ - на первый элемент, меньший `target` , **поэтому индекс $i$ и является точкой вставки**.
|
||||
После завершения цикла указатель $i$ будет указывать на самый левый `target` , а указатель $j$ - на самый правый элемент, меньший `target` , **поэтому индекс $i$ и является точкой вставки**.
|
||||
|
||||
=== "<1>"
|
||||
{ class="animation-figure" }
|
||||
@@ -389,7 +389,7 @@ comments: true
|
||||
elif nums[m] > target:
|
||||
j = m - 1 # target находится в интервале [i, m-1]
|
||||
else:
|
||||
j = m - 1 # Первый элемент меньше target находится в интервале [i, m-1]
|
||||
j = m - 1 # Самый правый элемент, меньший target, находится в интервале [i, m-1]
|
||||
# Вернуть точку вставки i
|
||||
return i
|
||||
```
|
||||
@@ -407,7 +407,7 @@ comments: true
|
||||
} else if (nums[m] > target) {
|
||||
j = m - 1; // target находится в интервале [i, m-1]
|
||||
} else {
|
||||
j = m - 1; // Первый элемент меньше target находится в интервале [i, m-1]
|
||||
j = m - 1; // Самый правый элемент, меньший target, находится в интервале [i, m-1]
|
||||
}
|
||||
}
|
||||
// Вернуть точку вставки i
|
||||
@@ -428,7 +428,7 @@ comments: true
|
||||
} else if (nums[m] > target) {
|
||||
j = m - 1; // target находится в интервале [i, m-1]
|
||||
} else {
|
||||
j = m - 1; // Первый элемент меньше target находится в интервале [i, m-1]
|
||||
j = m - 1; // Самый правый элемент, меньший target, находится в интервале [i, m-1]
|
||||
}
|
||||
}
|
||||
// Вернуть точку вставки i
|
||||
@@ -449,7 +449,7 @@ comments: true
|
||||
} else if (nums[m] > target) {
|
||||
j = m - 1; // target находится в интервале [i, m-1]
|
||||
} else {
|
||||
j = m - 1; // Первый элемент меньше target находится в интервале [i, m-1]
|
||||
j = m - 1; // Самый правый элемент, меньший target, находится в интервале [i, m-1]
|
||||
}
|
||||
}
|
||||
// Вернуть точку вставки i
|
||||
@@ -474,7 +474,7 @@ comments: true
|
||||
// target находится в интервале [i, m-1]
|
||||
j = m - 1
|
||||
} else {
|
||||
// Первый элемент меньше target находится в интервале [i, m-1]
|
||||
// Самый правый элемент, меньший target, находится в интервале [i, m-1]
|
||||
j = m - 1
|
||||
}
|
||||
}
|
||||
@@ -498,7 +498,7 @@ comments: true
|
||||
} else if nums[m] > target {
|
||||
j = m - 1 // target находится в интервале [i, m-1]
|
||||
} else {
|
||||
j = m - 1 // Первый элемент меньше target находится в интервале [i, m-1]
|
||||
j = m - 1 // Самый правый элемент, меньший target, находится в интервале [i, m-1]
|
||||
}
|
||||
}
|
||||
// Вернуть точку вставки i
|
||||
@@ -520,7 +520,7 @@ comments: true
|
||||
} else if (nums[m] > target) {
|
||||
j = m - 1; // target находится в интервале [i, m-1]
|
||||
} else {
|
||||
j = m - 1; // Первый элемент меньше target находится в интервале [i, m-1]
|
||||
j = m - 1; // Самый правый элемент, меньший target, находится в интервале [i, m-1]
|
||||
}
|
||||
}
|
||||
// Вернуть точку вставки i
|
||||
@@ -542,7 +542,7 @@ comments: true
|
||||
} else if (nums[m] > target) {
|
||||
j = m - 1; // target находится в интервале [i, m-1]
|
||||
} else {
|
||||
j = m - 1; // Первый элемент меньше target находится в интервале [i, m-1]
|
||||
j = m - 1; // Самый правый элемент, меньший target, находится в интервале [i, m-1]
|
||||
}
|
||||
}
|
||||
// Вернуть точку вставки i
|
||||
@@ -563,7 +563,7 @@ comments: true
|
||||
} else if (nums[m] > target) {
|
||||
j = m - 1; // target находится в интервале [i, m-1]
|
||||
} else {
|
||||
j = m - 1; // Первый элемент меньше target находится в интервале [i, m-1]
|
||||
j = m - 1; // Самый правый элемент, меньший target, находится в интервале [i, m-1]
|
||||
}
|
||||
}
|
||||
// Вернуть точку вставки i
|
||||
@@ -584,7 +584,7 @@ comments: true
|
||||
} else if nums[m as usize] > target {
|
||||
j = m - 1; // target находится в интервале [i, m-1]
|
||||
} else {
|
||||
j = m - 1; // Первый элемент меньше target находится в интервале [i, m-1]
|
||||
j = m - 1; // Самый правый элемент, меньший target, находится в интервале [i, m-1]
|
||||
}
|
||||
}
|
||||
// Вернуть точку вставки i
|
||||
@@ -605,7 +605,7 @@ comments: true
|
||||
} else if (nums[m] > target) {
|
||||
j = m - 1; // target находится в интервале [i, m-1]
|
||||
} else {
|
||||
j = m - 1; // Первый элемент меньше target находится в интервале [i, m-1]
|
||||
j = m - 1; // Самый правый элемент, меньший target, находится в интервале [i, m-1]
|
||||
}
|
||||
}
|
||||
// Вернуть точку вставки i
|
||||
@@ -627,7 +627,7 @@ comments: true
|
||||
} else if (nums[m] > target) {
|
||||
j = m - 1 // target находится в интервале [i, m-1]
|
||||
} else {
|
||||
j = m - 1 // Первый элемент меньше target находится в интервале [i, m-1]
|
||||
j = m - 1 // Самый правый элемент, меньший target, находится в интервале [i, m-1]
|
||||
}
|
||||
}
|
||||
// Вернуть точку вставки i
|
||||
@@ -652,7 +652,7 @@ comments: true
|
||||
elsif nums[m] > target
|
||||
j = m - 1 # target находится в интервале [i, m-1]
|
||||
else
|
||||
j = m - 1 # Первый элемент меньше target находится в интервале [i, m-1]
|
||||
j = m - 1 # Самый правый элемент, меньший target, находится в интервале [i, m-1]
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user