С решениями Python и Javascript: решение проблемы со средним литкодом

Понимание проблемы

Минимальное количество вызовов функций для создания целевого массива — средняя задача в leetcode, надеюсь, вы внимательно прочитали задачу и попытались ее решить. Эта задача требует, чтобы вы выполнили наименьшее количество операций, которые вы можете выполнить, чтобы добраться до нужного массива. Теперь вопрос, как мы можем выполнять такие операции, чтобы подсчитать его числа, чтобы достичь целевого массива наименьшим возможным способом.

Первоначальные мысли

Давайте возьмем этот пример, имея [2, 2] в качестве целевого массива, и мы хотим знать минимальное количество операций для достижения этого массива. Итак, мы начинаем с [0, 0], добавляя 1 к каждому элементу (сейчас 2 операции), достигая [1, 1], а затем умножаем весь массив на 2 (1 операция), достигая целевого массива, который мы хотим [2, 2], поэтому у нас есть 3 операции для достижения желаемого массива для этого примера, как показано ниже:

Но трудно перейти от [0, 0] к [2, 2] из-за возможности неправильного угадывания следующего массива, которого мы хотим достичь. Что мы можем сделать лучше, так это двигаться назад от [2, 2] к [0, 0], как показано ниже:

В этом случае мы можем делить вместо умножения и вычитать вместо сложения, как показано оранжевым цветом, и мы получим такое же количество операций.

Лучший путь

Теперь нам предстоит выполнить две основные операции: деление и вычитание. Кажется, что мы используем деление, когда все элементы в массиве делятся на 2, но что, если есть нечетное число, мы вычитаем. Целочисленное деление может избавить нас от беспокойства о существовании нечетных чисел, потому что четные и нечетные числа будут разделены, и останется только подсчет операций для каждого существующего нечетного числа, который можно выполнить путем вычисления остатка. Остаток любого числа на 2 равен либо 1, либо 0. Если 1, мы указываем, что число нечетное, и тогда мы знаем, что это одна операция.

Вот несколько сценариев того, как это целочисленное деление и остаток вычисляются в Python и Javascript:

Питон

Javascript

Подтверждение

Код Python — это совместная работа с моим лучшим другом Nour. На самом деле он внес свой вклад в объяснение более эффективного решения, найденного в leetcode, пожалуйста, посмотрите на эту фантастическую суть:

Мотивировано

Больше решения проблем?

Возможно, вы захотите взглянуть на другие материалы для решения проблем :)







Первоначально опубликовано