Что происходит, ребята? Если вы еще не сделали этого, обязательно загляните на мой сайт и ознакомьтесь с некоторыми проектами, которые я уже реализовал! Http://aaronmassey.pro/
Пятница должна была быть днем, когда я публикую учебник по алгоритму, но я совершенно забыл из-за праздника. Раз уж я забыл, то сделаю две, чтобы наверстать упущенное. Вот пара алгоритмов, которые я решил на CodeFights.
Подсказка №1 - После того, как они стали известными, все CodeBots решили переехать в новое здание и жить вместе. Здание представлено прямоугольным matrix
комнатами. Каждая ячейка в matrix
содержит целое число, которое представляет цену комнаты. Некоторые комнаты бесплатные (их стоимость 0
), но это, вероятно, потому, что в них обитают привидения, поэтому все боты их боятся. Вот почему любая комната, которая свободна или расположена где-нибудь ниже свободной комнаты в том же столбце, не считается подходящей для проживания ботов. in. Помогите ботам рассчитать общую стоимость всех подходящих для них комнат.
ex. matrix = [[0, 1, 1, 2],
[0, 5, 0, 0],
[2, 0, 3, 3]] ans. 1+1+2+5=9
Для начала нам нужно пройтись по матрице и найти, где были нули. Я сделал это с помощью вложенного цикла for и оператора if.
for (let i=0; i<matrix.length; i++){ for (let j=0; j<matrix[i].length; j++){ if (matrix[i][j] === 0) { } } }
Первый цикл for (i) проходит через внешний массив. Второй цикл for (j) проходит через внутренние массивы.
Внутри оператора if мы хотим установить для каждого значения в том же столбце значение 0, если оно ниже текущего значения. Мы можем сделать это с помощью другого цикла.
if (matrix[i][j] === 0) { for (let k=i+1; k<matrix.length; k++){ matrix[k][j] = 0; } }
«K» изначально установлен на i + 1, чтобы сместить текущее значение и начать со следующей строки.
По сути, мы закончили! Все, что нам нужно сделать, это просуммировать все значения внутри массива. Я сделал это с помощью переменной total и вложенного цикла for.
let total = 0; for (let x=0; x<matrix.length; x++){ for (let y=0; y<matrix[x].length; y++){ total += matrix[x][y] } } return total;
Вот и все, мы успешно нашли общую стоимость жилых домов! Полный код ниже.
function matrixElementsSum(matrix) { let total = 0; for (let i=0; i<matrix.length; i++){ for (let j=0; j<matrix[i].length; j++){ if (matrix[i][j] === 0) { for (let k=i+1; k<matrix.length; k++){ matrix[k][j] = 0; } } } } for (let x=0; x<matrix.length; x++){ for (let y=0; y<matrix[x].length; y++){ total += matrix[x][y] } } return total; }
Подсказка №2 - Область формы
Ниже мы определим n
-интересный многоугольник. Ваша задача найти площадь многоугольника для заданного n
.
1
-Интересный многоугольник - это просто квадрат со стороной длиной 1
. n
интересный многоугольник получается, если взять n - 1
интересный многоугольник и добавить 1
интересных многоугольников к его краю, бок о бок.
- Для
n = 2
вывод должен бытьshapeArea(n) = 5
; - Для
n = 3
вывод должен бытьshapeArea(n) = 13
Вы можете увидеть 1
-, 2
-, 3
- и 4
интересных многоугольников на картинке ниже.
Посмотрев на картинку, я сразу увидел закономерность. Форма представляет собой квадрат, но внутри квадрата имеется n-1
столбцов, а в каждом столбце n-1
единиц. Благодаря этому шаблону площадь можно легко найти, немного изменив формулу площади для квадрата.
area = side² - это исходная площадь по формуле квадрата. Мы также должны учитывать столбцы, которые также образуют квадрат, но с каждой стороной на 1 меньше, поэтому площадь = (сторона-1) ² * (сторона-1) ². Затем мы просто складываем их вместе, чтобы получить общую площадь.
function shapeArea(n) { return (n*n) + ((n-1)*(n-1)); }
Дайте мне знать, если вы знаете более простые решения для этих алгоритмов. Разместите их ниже, и я их проверю!