Автор оригинала: Dylan Attal.
Сортировка – очень важная концепция при написании алгоритмов. Есть все виды сортов: пузырь-сортировка, сортировка оболочки, сортировка блока, сортировка расческа, сортировка коктейля, сортировка GNOME – Я не делаю это ?| Действительно
Эта проблема дает нам проблеск в замечательный мир рода. Мы должны сортировать массив номеров, по крайней мере, для самых больших и выясните, где в этом массиве будет принадлежать данное число.
Алгоритм Инструкции
function getIndexToIns(arr, num) {
return num;
}
getIndexToIns([40, 60], 50);Предоставил тестовые случаи
GetIndextoins ([10, 20, 30, 40, 50], 35)должен вернуться3ОтказGetIndextoins ([10, 20, 30, 40, 50], 35)должен вернуть номер.GetIndextoins ([10, 20, 30, 40, 50], 30)должен вернуться2ОтказGetIndextoins ([10, 20, 30, 40, 50], 30)должен вернуть номер.GetIndextoins ([40, 60], 50)должен вернуться1ОтказGetIndextoins ([40, 60], 50)должен вернуть номер.GetIndextoins ([3, 10, 5], 3)должен вернуться0ОтказGetIndextoins ([3, 10, 5], 3)должен вернуть номер.GetIndextoins ([5, 3, 20, 3], 5)должен вернуться2ОтказGetIndextoins ([5, 3, 20, 3], 5)должен вернуть номер.GetIndextoins ([2, 20, 10], 19)должен вернуться2ОтказGetIndextoins ([2, 20, 10], 19)должен вернуть номер.GetIndextoins ([2, 5, 10], 15)должен вернуться3ОтказGetIndextoins ([2, 5, 10], 15)должен вернуть номер.GetIndextoins ([], 1)должен вернуться0ОтказGetIndextoins ([], 1)должен вернуть номер.
Решение № 1: .sort (), .indexof ( )
Педак
Понимание проблемы : У нас есть два входа, массив и номер. Наша цель – вернуть индекс нашего номера ввода после того, как он отсортирован в входной массив.
Примеры/тестовые случаи : Хорошие люди на FreeCodeCamp не говорят нам, как следует отсортировать входной массив, но предоставленные тестовые случаи позволяют понять, что входной массив должен быть отсортирован от наименьшего для всего наилучшего.
Обратите внимание, что существует краевой случай на последних двух, при условии, что тестовые случаи, когда входной массив является пустым массивом.
Структура данных : Поскольку мы в конечном итоге возвращаем индекс, придерживаясь массивов, собирается работать для нас.
Мы собираемся использовать нефте-метод имени .индекс () :
.индекс () Возвращает первый индекс, в который элемент присутствует в массиве или -1 Если элемент вообще нет. Например:
let food = ['pizza', 'ice cream', 'chips', 'hot dog', 'cake']
food.indexOf('chips')// returns 2food.indexOf('spaghetti')// returns -1Мы также собираемся использовать .concat () здесь вместо .толкать () . Почему? Потому что, когда вы добавляете элемент на массив, используя .толкать () он возвращает длину нового массива. Когда вы добавляете элемент на массив, используя .concat () Это возвращает новый массив сама. Например:
let array = [4, 10, 20, 37, 45]
array.push(98)// returns 6array.concat(98)// returns [4, 10, 20, 37, 45, 98]
Алгоритм :
- Вставить
НомервмассивОтказ - Сортировать
arrот всего наилучшего. - Вернуть индекс
NumОтказ
Код : См. ниже!
function getIndexToIns(arr, num) {
// Insert num into arr, creating a new array.
let newArray = arr.concat(num)
// [40, 60].concat(50)
// [40, 60, 50]
// Sort the new array from least to greatest.
newArray.sort((a, b) => a - b)
// [40, 60, 50].sort((a, b) => a - b)
// [40, 50, 60]
// Return the index of num which is now
// in the correct place in the new array.
return newArray.indexOf(num);
// return [40, 50, 60].indexOf(50)
// 1
}
getIndexToIns([40, 60], 50);Без местных переменных и комментариев:
function getIndexToIns(arr, num) {
return arr.concat(num).sort((a, b) => a - b).indexOf(num);
}
getIndexToIns([40, 60], 50);Решение № 2: .sort (), .findindex ()
Педак
Понимание проблемы : У нас есть два входа, массив и номер. Наша цель – вернуть индекс нашего номера ввода после того, как он отсортирован в входной массив.
Примеры/тестовые случаи : Хорошие люди на FreeCodeCamp не говорят нам, как следует отсортировать входной массив, но предоставленные тестовые случаи позволяют понять, что входной массив должен быть отсортирован от наименьшего для всего наилучшего.
Есть два краевых случая для учета с этим решением:
- Если входной массив пуст, нам нужно вернуть
0потому чтоопускатьбудет Только Элемент в этом массиве, следовательно, при индексе0Отказ - Если
Numбудет принадлежать в самом концеarrотсортировано от наименьшего для наибольшего, тогда нам нужно вернуть длинуприостановить.
Структура данных : Поскольку мы в конечном итоге возвращаем индекс, придерживаясь массивов, собирается работать для нас.
Давайте оформить заказ .findindex. () Чтобы увидеть, как он поможет решить эту проблему:
.findindex () Возвращает индекс первого элемента в массиве, который удовлетворяет предоставленной функции тестирования. В противном случае он возвращает -1, указывая, что ни один элемент не передал тест. Например:
let numbers = [3, 17, 94, 15, 20] numbers.findIndex((currentNum) => currentNum % 2 == 0) // returns 2 numbers.findIndex((currentNum) => currentNum > 100) // returns -1
Это полезно для нас, потому что мы можем использовать .findindex. () Для сравнения нашего ввода опускать каждому количеству на нашем входе arr и выяснить, где он будет соответствовать в порядке, по крайней мере, для самых больших.
Алгоритм :
- Если
arrпустой массив, возврат0Отказ - Если
Numпринадлежит в конце отсортированного массива, вернуть длинуarrОтказ - В противном случае верните индекс
Numбыло бы, еслиприостановитьбыл отсортирован от наилучшего в наибольшей степени.
Код : См. ниже!
function getIndexToIns(arr, num) {
// Sort arr from least to greatest.
let sortedArray = arr.sort((a, b) => a - b)
// [40, 60].sort((a, b) => a - b)
// [40, 60]
// Compare num to each number in sortedArray
// and find the index where num is less than or equal to
// a number in sortedArray.
let index = sortedArray.findIndex((currentNum) => num <= currentNum)
// [40, 60].findIndex(40 => 50 <= 40) --> falsy
// [40, 60].findIndex(60 => 50 <= 60) --> truthy
// returns 1 because num would fit like so [40, 50, 60]
// Return the correct index of num.
// If num belongs at the end of sortedArray or if arr is empty
// return the length of arr.
return index === -1 ? arr.length : index
}
getIndexToIns([40, 60], 50);Без местных переменных и комментариев:
function getIndexToIns(arr, num) {
let index = arr.sort((a, b) => a - b).findIndex((currentNum) => num <= currentNum)
return index === -1 ? arr.length : index
}
getIndexToIns([40, 60], 50);Если у вас есть другие решения и/или предложения, пожалуйста, поделитесь в комментариях!
Эта статья является частью сценариев алгоритма серии FreeCodecamp.
Эта статья ссылается на FreeCodeCamp Основные алгоритмы сценариев: где я принадлежу.
Вы можете следовать за мной на Средний , LinkedIn и Github Действительно