Задачи кодирования - это хлеб с маслом для получения должности разработчика программного обеспечения, так как все крупные компании проверяют вас на задачах кодирования для должностей разработчиков программного обеспечения. Целая отрасль создана для подготовки кандидатов к решению задач кодирования. Проблемы кодирования сложны, и трудно научиться подходить к каждой задаче кодирования. Изначально мне не нравились задачи по программированию. Однако через некоторое время я начал получать удовольствие от их изучения, поскольку почувствовал, что это открыло мне глаза на общие структуры данных и шаблоны. Этот блог будет посвящен задаче кодирования под названием «Right Smaller Than», которая имеет дело с одной из наиболее распространенных структур данных, называемой массивом. Многие считают эту задачу кодирования сложной задачей. Я надеюсь, что этот блог поможет другим разработчикам узнать, как шаг за шагом подойти к этой проблеме.

Постановка проблемы

Для каждого числа в массиве посмотрите вправо от массива и посчитайте, во сколько раз число, которое меньше, чем оно появляется в массиве.

Пример: исходный массив [8,5,11, -1,3,4,2]

возвращает этот массив [5,4,4,0,1,1,0]

В этом примере первое число в исходном массиве - 8, и если мы посчитаем числа справа, которые меньше его, мы получим в сумме 5 числа. Если мы перейдем к следующему числу в исходном массиве, которым является 5, мы увидим, что есть 4 числа справа от 5, которые меньше его. Если мы продолжим это сравнение для всех чисел, то в конечном итоге мы получим полный массив [5,4,4,0,1,1,0].

Подход к решению этой проблемы

Решение подобных проблем с кодированием может быть обескураживающим, поскольку мы, люди, можем легко решить эту проблему, если посмотрим вправо от числа и посчитаем, сколько чисел меньше его. Создать компьютерную функцию, которая решает эту проблему, намного сложнее, поскольку мы должны понимать, как компьютеры мыслят в терминах массивов, сравнения, подсчета, хранения данных и возврата результатов, которые мы ищем. Мой подход к решению этой проблемы заключается в том, чтобы сначала подумать о том, как я, как человек, решить эту проблему, а затем, используя свои знания в области программирования, я могу закодировать это решение, чтобы компьютерная программа может правильно выполнить код, чтобы вернуть правильные результаты. С точки зрения того, как мы думаем как люди, по сравнению с тем, как работают компьютерные программы, основная трудность в решении многих задач кодирования.

Как человек решит эту проблему

Любой, кто понимает постановку задачи, легко решит эту проблему. Если бы вы описали, как вы решили эту проблему, обычными человеческими словами, вы могли бы описать ее следующим образом.

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

Решение проблемы как компьютерная программа

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

посмотрите на первое число: это означает, что мы должны получить доступ к массиву через его индекс. При разработке программного обеспечения мы получаем доступ к значениям массива через их индекс. Помните, что во многих языках программирования мы находим значение позиции элемента в массиве, используя индекс, а первый индекс в массиве для многих языков программирования начинается с 0, а не с числа 1. В исходном массиве мы будем говорить, что первое число 8 имеет индекс 0.

сравните все число справа от него и посмотрите, меньше ли оно, чем первое число: это преобразуется в оператор сравнения, такой как ›(больше чем) или‹ (меньше чем) в кодировке.

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

добавить в новый массив общее количество чисел меньше , чем оно есть: это означает, что нам нужно использовать счетчик (++), который отслеживает числа меньшие, чем он, и помещает его в (.push) новый массив.

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

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

Код Решение

Давайте посмотрим на одно возможное решение на JavaScript, которое использует термины, описанные как человеческие, так и компьютерные программы.

let array = [8, 5, 11, -1, 3, 4, 2]
function rightSmallerThan(array) {
const rightSmallerCounts = []
for (let i = 0; i < array.length; i++) {
let rightSmallerCount = 0
for (let j = i + 1; j < array.length; j++) {
if (array[j] < array[i])
rightSmallerCount++
}
rightSmallerCounts.push(rightSmallerCount)
}
return rightSmallerCounts
}
rightSmallerThan(array)

Разбивка кода

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

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

P.S. - Я написал этот блог, когда смотрел Индиану Джонса, поэтому мне пришлось добавить несколько гифок Индианы Джонса :-)