Введение:

Вернуться в мир технологий — все равно, что надеть старую пару туфель. Программирование было моей страстью последние 3 года, когда мне было всего 18 лет. Хотя, как и у всех, COVID-19 перевернул мою жизнь с ног на голову. После тяжелой битвы я вернулся и готов устроиться на свою первую работу в области веб-разработки! Это будет серия постов, посвященных моим объяснениям проблем LeetCode.

ПРИМЕЧАНИЕ. Я все еще нахожусь на среднем уровне программирования, поэтому я буду объяснять все, что в моих силах, и максимально удобно для новичков. Это запись моего роста в вопросах стиля интервью

две суммы:

Личная сложность: легкая
Время до финиша: 1 час 15 минут

Учитывая массив целых чисел nums и целое число target, верните индексы двух чисел так, чтобы в сумме они составляли target.

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

Вы можете вернуть ответ в любом порядке.

Пример 1:

Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].

Пример 2:

Input: nums = [3,2,4], target = 6
Output: [1,2]

Пояснение на английском языке:

Как вы только что прочитали в описании проблемы, наша цель — найти позиции (индексы) элементов, которые будут равны нашему целевому значению. По сути, мы хотим взять каждое целое число в массиве и сложить их вместе, чтобы увидеть, какие два целых числа равны нашей цели.

Input: nums = [3,2,4]       target = 6
3+2 = 5 X
3+4 = 7 X
2+3 = 5 X
2+4 = 6 Correct
output:[1,2] Correct
Inside the array, '2' & '4'are at index 1 and 2. Therefore the answer would be [1,2]

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

Input: nums = [3,2,4]       target = 6
3+3 = 6 X
output: [0,0] Wrong

Обратите внимание, что мы пытаемся найти ИНДЕКСЦЕЛЫХ ЧИСЕЛ, равных цели, вы не вернете два целых числа, равных вашей цели, ответом будет индекс в котором эти целые числа записываются в массиве.

Настройка кода:

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

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

//arguments
nums = [3,2,4];
target = 6;
//function
var twoSum = function(nums, target) {
  
};

Теперь внутри нашего Replit у нас есть функция, которая принимает в качестве аргументов как наш массив(числа), так и целевые значения.

Аргументы – это массивоподобный объект, доступный внутри функций, который содержит значения указанных аргументов, переданных этой функции.

Хорошо, идеально! Теперь у нас есть Replit, содержащий функцию, которая имеет доступ к аргументам, предоставленным нам LeetCode… но… Как запустить ее в песочнице кода? Легкий! мы добавляем console.log() в конец программы, чтобы было что запускать. Так:

console.log(twoSum(nums, target))

Логика двух сумм:

Лично я считаю, что самый простой способ просмотреть массив и сложить вместе разные целые числа — это использовать вложенный цикл for.

Вложенный цикл — это цикл внутри цикла, внутренний цикл внутри тела внешнего цикла. Как это работает, так это то, что первый проход внешнего цикла запускает внутренний цикл, который выполняется до завершения. Затем второй проход внешнего цикла снова запускает внутренний цикл.

nums = [3,2,4];
target = 6;
var twoSum = function(nums, target) {
   for (let i=0; i<nums.length; i++){
     for (let j=0; j<nums.length; j++){
       console.log(nums[i], "+", nums[j], "=")
       console.log(nums[i]+nums[j])
}
   }
};
console.log(twoSum(nums, target))

Внутри вложенного цикла у нас есть два console.log(). Они должны продемонстрировать, что делает вложенный цикл.

ПРИМЕЧАНИЕ:
Ввод 'nums[i]' вернет целочисленное значение вашей переменной цикла
Ввод 'i ' вернет индекс вашей переменной цикла

Выход:

i 3 + j 3 = 6
i 3 + j 2 = 5
i 3 + j 4 = 7
i 2 + j 3 = 5
i 2 + j 2 = 4
i 2 + j 4 = 6
i 4 + j 3 = 7
i 4 + j 2 = 6
i 4 + j 4 = 8

Как вы можете видеть, теперь у нас есть каждое целое число, добавляемое друг к другу. Все целые числа перед «i» представляют внешний цикл, а целые числа перед каждым «j» представляют внешний цикл…

Теперь мы столкнулись с проблемой сложения целых чисел с одним и тем жеиндексом, так как же мы это исправим? Решение, которое я придумал, — это вложенный оператор if.

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

nums = [3,2,4];
target = 6;
var twoSum = function(nums, target) {
   for (let i=0; i<nums.length; i++){
     for (let j=0; j<nums.length; j++){
       if(j != i){
         let fin = nums[i]+nums[j]
       
       }}
   }
};

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

nums = [3,2,4];
target = 6;
var twoSum = function(nums, target) {
   for (let i=0; i<nums.length; i++){
     for (let j=0; j<nums.length; j++){
       if(j != i){
         let sum = nums[i]+nums[j]
        if(sum === target){
          return [i,j]
        }
     }}
}};
Output[1,2] Correct

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

console.log(twoSum(числа, цель))