Как парень, который не силен в математике, последние игрушечные задачки, над которыми я работал в OperationSpark, были, мягко говоря, довольно интересными. Возьмем это, называемое LargestProductOfThree, оно предназначено для вычисления максимально возможного результата из трех чисел из массива. Задача, на первый взгляд, казалась простой, как простое умножение. Но пограничные случаи, которые нам дали, вскоре показали, что я не могу просто решить какое-то старое математическое решение. Проблема заключается не только в том, что он должен найти максимально возможное произведение трех чисел массива, в массиве могут быть как положительные, так и отрицательные числа. Если я не ошибаюсь, умножение двух отрицательных чисел даст вам положительное. Это означает, что если ваш массив выглядит примерно так [-31, 41, 34, -37, -17, 29], то для получения максимально возможного потребуется использовать некоторые из этих отрицательных чисел. давайте посмотрим на код для него.

В приведенном выше коде вы заметите, что я использовал метод сортировки для создания нового массива, организованного в массив с меньшими числами (отрицательными, если они заданы) последними и большими числами первыми. Это позволяет мне создать два возможных результата, один из которых представляет собой умножение трех самых высоких положительных чисел. Второе — это последнее и предпоследнее позиционированные числа, которые должны быть отрицательными, если какие-либо были переданы, умноженные на первое число в массиве (будет положительным). Давайте назовем первое значение positveSum, а второе — отрицательным значением. Теперь, когда у нас есть два самых высоких возможных результата, мы можем сравнить их и посмотреть, какой из них на самом деле больше. Затем мы просто вернем более высокий, как в условном выше. Если бы мы протестировали массив, который я должен был сделать выше, сначала мы бы его организовали.

[-31, 41, 34, -37, -17, 29] // передается в массиве при вызове функции

[ 41, 34, 29, -17, -31, -37 ] // после сортировки массива от большего к меньшему

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

41 * 34 * 29 = 40426 // мы назовем это positveSum

41 * -31 * -37 = 47027 // мы назовем это отрицательной суммой

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

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