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

За время моего обучения математике и компьютерным наукам я встречал множество различных типов алгоритмов. Единственное, что всегда оставалось неизменным во всех них, — это подход. Я разобью на этапы и подробно расскажу о каждом шаге.

  1. НЕ ПРИКАСАЙТЕСЬ К КЛАВИАТУРЕ.
  2. Думайте вслух.
  3. Запишите входные данные, которые вам даны, и ожидаемые результаты.
  4. Напишите МНОГО примеров.
  5. Говорите вслух, что именно делает каждый отдельный пример.
  6. Если вы застряли на том, что не видите закономерности или того, как начать, НЕ ПАНИКУЙТЕ!
  7. Напишите псевдокод для примеров, которые вы уже записали.
  8. Говорите вслух, когда пишете! (Не бойтесь показаться сумасшедшим из Starbucks.)
  9. Если у вас есть представление о решении, попробуйте преобразовать свой псевдокод в функциональный код.
  10. Если кажется, что все потеряно, начните сначала и попробуйте разные примеры.

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

Другая крупная ошибка, которую я совершил, заключалась в том, что я думал, что точно знаю, как подойти к идее через 10 секунд после того, как проблема была поставлена ​​передо мной, и прыгал прямо в код, даже не нарисовав ничего на схеме или не пройдя процесс, который я изложил выше. Это очень важно, потому что вы убеждаете себя, что ЗНАЕТЕ ответ и, возможно, с самого начала пойдете по неверному пути, а затем не будете знать, как выбрать другой путь.

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

Первое, что я бы сделал, это сразу на 3 числа, а затем увидел бы, что наибольшее произведение — это три числа, умноженные вместе. Это может показаться очень тривиальным, но это именно то, что эти числа будут делать для вас.

Теперь я должен думать, что у меня есть?

  1. Множество
  2. Целые числа

Чтобы получить наивысший продукт, мне нужно, чтобы числа были большими, поэтому я хочу получить самые большие числа, которые мне дали. Прокрутите и найдите 3 самых больших положительных числа.

Я сделал именно это, но ошибся! Где я ошибся?

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

Скажем, у нас есть массив:

var array = [-4,-1,1,3,6];

Самое большое число будет -4*-1*6.

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

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

//loop to find 3 biggest pos nums
//loop to find 2 smallest neg nums
//check which is larger between the two products
//return the largest

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

.

.

.

// Sort to Get 3 Highest and 2 Lowest
function highestProduct(array) {
  if (!array || array.length < 3) {
    return 0;
  }
  array.sort(function(a, b) { return a - b; });
  var usingSmalls = array[0] * array[1] * array[array.length - 1];
  var usingBigs = array[array.length - 1] * array[array.length - 2] * array[array.length - 3];
  return Math.max(usingSmalls, usingBigs);
}

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