Разбор задачи: Назначение файлов cookie

Предложенный нами код решения:

def find_content_children(g, s):
    """
    :param g: список факторов жадности детей
    :param s: список размеров печенья
    :return: максимальное количество довольных детей
    """
    # Сортируем списки факторов жадности и размеров печенья
    g.sort()
    s.sort()
    
    child_i = 0  # Индекс текущего ребенка
    cookie_j = 0  # Индекс текущего печенья
    
    # Проходим по спискам, пока есть дети и печенья
    while child_i < len(g) and cookie_j < len(s):
        if s[cookie_j] >= g[child_i]:  # Если печенье достаточно большое
            child_i += 1  # Этот ребенок доволен
        cookie_j += 1  # Переходим к следующему печенью
    
    return child_i  # Количество довольных детей

Пошаговый разбор:

  1. Инициализация функции и комментарии:
    • Объявляем функцию find_content_children с параметрами g (список жадностей детей) и s (список размеров печенья).
    • Добавляем комментарии, чтобы объяснить каждый шаг кода.
  2. Сортировка входных данных:

    • Списки g и s сортируются с помощью метода .sort(). Это нужно для того, чтобы:
      • Обрабатывать детей с наименьшей жадностью первыми.
      • Использовать самые маленькие подходящие печенья.
    g.sort() 
    s.sort()
  3. Инициализация указателей:

    • child_i = 0 — индекс текущего ребенка, который ждет печенье.
    • cookie_j = 0 — индекс текущего печенья.
    child_i = 0
    cookie_j = 0
  4. Основной цикл:

    • Цикл продолжается, пока есть дети (child_i < len(g)) и печенья (cookie_j < len(s)).
    • На каждой итерации проверяется, подходит ли текущее печенье ребенку:
      • Если размер печенья s[cookie_j] больше или равен жадности ребенка g[child_i], ребенок доволен:
        • Увеличиваем индекс child_i на 1, чтобы перейти к следующему ребенку.
      • В любом случае увеличиваем cookie_j, чтобы перейти к следующему печенью.
    while child_i < len(g) and cookie_j < len(s):
        if s[cookie_j] >= g[child_i]:  # Если печенье достаточно большое
            child_i += 1  # Этот ребенок доволен
        cookie_j += 1  # Переходим к следующему печенью
  5. Возврат результата:

    • После завершения цикла child_i указывает на количество довольных детей, так как каждый обработанный ребенок получил подходящее печенье.
    return child_i

Пример работы

Пример 1:

Ввод: g = [1, 2, 3], s = [1, 1]

  1. Сортируем списки:
    g = [1, 2, 3], s = [1, 1].
  2. Начинаем обработку:
    • Первый ребенок (жадность = 1) получает первое печенье (размер = 1).
    • Второе печенье (размер = 1) не подходит ребенку с жадностью = 2.
  3. Вывод: 1 ребенок доволен.

Пример 2:

Ввод: g = [1, 2], s = [1, 2, 3]

  1. Сортируем списки:
    g = [1, 2], s = [1, 2, 3].
  2. Начинаем обработку:
    • Первый ребенок (жадность = 1) получает первое печенье (размер = 1).
    • Второй ребенок (жадность = 2) получает второе печенье (размер = 2).
  3. Вывод: 2 ребенка довольны.

 



Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии