⚙️ Алгоритмы  ·  20 вопросов  ·  ~40 мин  ·  ⏱ Таймер 40:00  ·  Средний  · 

Массивы и строки

Массивы и строки кажутся простыми, пока не появляются отрицательные индексы, перекрывающиеся срезы, несколько указателей и окна с меняющейся границей. Здесь нужно трассировать код, объяснять безопасный сдвиг указателя, находить дефект обновления и выбирать вход, который разоблачает ошибку.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выбери один ответ из четырёх. В тесте 20 вопросов и 40 минут. После завершения откроются общий процент, четыре тематические шкалы, правильные ответы и пояснения.
Вопрос 1 из 20
Какой список будет напечатан?
Python
a = [3, 8, 2, 7, 5, 1]
b = a[1:5:2]
b.reverse()
print(b)
Вопрос 2 из 20
Что окажется в a после выполнения кода?
Python
a = [0, 1, 2, 3, 4, 5]
a[1:5] = a[4:0:-1]
print(a)
Вопрос 3 из 20
Массив длины n индексируется с нуля. Какой полуинтервал описывает все допустимые индексы?
0\le i<n
Вопрос 4 из 20
Какой фрагмент строки окажется в переменной part?
Python
s = "algorithm"
part = s[-2:1:-3]
print(part)
Вопрос 5 из 20
Функция меняет a[i] и a[n-1-i] местами для i от 0 до n//2−1. Что она делает?
Вопрос 6 из 20
Какая пара индексов будет найдена первой?
Python
a = [1, 3, 4, 6, 8, 10]
target = 11
left, right = 0, len(a) - 1
while left < right:
    s = a[left] + a[right]
    if s == target:
        break
    if s < target:
        left += 1
    else:
        right -= 1
print(left, right)
Вопрос 7 из 20
Какой список вернёт функция?
Python
def compact(a):
    if not a:
        return []
    write = 1
    for read in range(1, len(a)):
        if a[read] != a[write - 1]:
            a[write] = a[read]
            write += 1
    return a[:write]

print(compact([1, 1, 2, 2, 2, 4, 4, 5]))
Вопрос 8 из 20
Почему алгоритм поиска пары с заданной суммой двумя указателями требует отсортированного массива?
Вопрос 9 из 20
Сколько чётных элементов окажется в начале массива и как будет выглядеть этот префикс?
Python
a = [2, 7, 1, 8, 2, 8]
slow = 0
for fast in range(len(a)):
    if a[fast] % 2 == 0:
        a[slow], a[fast] = a[fast], a[slow]
        slow += 1
print(slow, a[:slow])
Вопрос 10 из 20
Встречные указатели проверяют палиндром. Какое условие цикла достаточно?
s_i=s_{n-1-i}
Вопрос 11 из 20
Какую максимальную сумму окна длины 3 найдёт программа?
Python
a = [4, -1, 2, 7, -3, 5]
k = 3
current = sum(a[:k])
best = current
for right in range(k, len(a)):
    current += a[right] - a[right - k]
    best = max(best, current)
print(best)
Вопрос 12 из 20
Какую длину напечатает программа?
Python
a = [2, 1, 3, 2, 4, 1]
limit = 6
left = 0
total = 0
best = 0
for right, x in enumerate(a):
    total += x
    while total > limit:
        total -= a[left]
        left += 1
    best = max(best, right - left + 1)
print(best)
Вопрос 13 из 20
Почему при поиске самого короткого подмассива с суммой не меньше S для положительных чисел внутреннее условие обычно пишут while, а не if?
Вопрос 14 из 20
В чём ошибка обновления суммы?
Python
def max_window(a, k):
    current = sum(a[:k])
    best = current
    for right in range(k, len(a)):
        current += a[right]
        best = max(best, current)
    return best
Вопрос 15 из 20
Для какого типа данных стандартное окно с суммой и движением left только вперёд может перестать быть корректным при условии «сумма не больше limit»?
Вопрос 16 из 20
Что произойдёт при вызове second_largest([5, 5, 5])?
Python
def second_largest(a):
    first = second = float('-inf')
    for x in a:
        if x > first:
            second, first = first, x
        elif x > second and x != first:
            second = x
    return second
Вопрос 17 из 20
На каком входе функция завершится с ошибкой?
Python
def middle_pair(a):
    m = len(a) // 2
    return a[m - 1], a[m]
Вопрос 18 из 20
Какой минимальный набор особенно полезен для проверки функции разворота массива на месте?
Вопрос 19 из 20
Какой результат вернёт функция для строки "a--a"?
Python
def is_palindrome(s):
    left, right = 0, len(s) - 1
    while left < right:
        while left < right and not s[left].isalnum():
            left += 1
        while left < right and not s[right].isalnum():
            right -= 1
        if s[left].lower() != s[right].lower():
            return False
        left += 1
        right -= 1
    return True
Вопрос 20 из 20
Функция поиска максимума начинает с best = 0. На каком классе непустых входов это даёт неверный ответ?
best\leftarrow a_0\quad(n>0)

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу