Рубрики
Uncategorized

Решение для PHP с кодом Leetcode — d107 453. Минимальное количество переходов к равным элементам массива

Автор оригинала: David Wong.

Ссылка на Заголовок

453. Minimum Moves to Equal Array Elements Минимальное количество переходов к равным элементам массива

Анализ названия

Учитывая массив, каждый раз добавляйте от 1 до n-1 массивов в массив, чтобы возвращать минимальные шаги, необходимые для равенства значений всех элементов.

размышляющий

Первая мысль состоит в том, чтобы выбрать наименьший элемент n-1 для добавления на каждом шаге. Но очевидно, что каждый шаг сортируется, чтобы исключить наибольшее число, а затем добавлять по одному, изменение порядка занимает много времени. Поэтому нам нужно найти закон и упростить метод поиска необходимых шагов.

Давайте сначала проанализируем простые из них, а затем обобщим их.

1.1.1 In this case, just return directly. Because all elements are the same. 1.1.2 In this case, it only needs one step to become 2.2.21.2.2 In this case, the first step is 1.3.2 ; the second step is 2.3.3 ; the third step is 3.4.3 ; the fourth step is 4.4.4 。 В этом случае просто вернитесь напрямую. Потому что все элементы одинаковы. 1.1.1

1.3.5 , 2.4.5 , 3.5.5 , 4.6.5 , 5.7.5 , 6.7.6 , 7.7.7 。 There are 6 steps. It’s strange here. It’s 7 in the end. I guess the rule is 5 + 3-1, that is to say, the sum minus the minimum value is the final value, and the step is that I guess it is the final value minus the minimum value. 1.3.5

Однако количество шагов не соответствует этому правилу. например 1.2.2 However, the number of steps does not conform to this rule. for example 1.2.2

Дальнейший анализ шести шагов заключается в том, как получить. 3-1=2,5-1=4,2+4。 А? Умно? Further analysis of the six steps is how to get. 3-1=2,5-1=4,2+4。 Eh? Clever? But found that 1.2.2

1.3.3 , 2.4.3 , 3.4.4 , 4.5.4 , 5.5.5 。 Four steps too! 3+3-1=5. No, first of all, add it up and then subtract it: 3 + 3 + 1-1-1, but it can’t make up 4, then subtract 1. Three ones have been cut. Is it the number of elements 1? So I started to write code to test the sum of all elements minus n minimum values (n is the array length). 1.3.3

И это прошло.

Окончательный код

php
class Solution {

    /**
     * @param Integer[] $nums
     * @return Integer
     */
    function minMoves($nums) {
        $min = min($nums);
        return array_sum($nums) - count($nums) * $min;
    }
}

Этот код превзошел только 60%! Я думаю… Это не вызвано минимумом, суммой массива и количеством Поэтому он был изменен на:

Более 80% кода! Хотя это не на 100%, это немного эффективнее, верно?

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