Вызов:
Учитывая массив элементов, вернуть перетасованный массив элементов. Сохраняйте линейную сложность.
Подход:
нам нужно случайным образом изменить положение каждого элемента в предоставленном массиве. Чтобы снизить сложность, нам нужно перебирать каждый элемент только один раз. У нас может быть переменная-счетчик для перемещения по индексам массива, который необходимо изменить в данный момент, и заменять этот элемент значением по случайно определенному индексу.
Решение:
Давайте создадим вспомогательную функцию, которая поможет нам поменять местами значения в одном и том же массиве с разными индексами.
var swap = function(a, b, arr){ var temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; return arr; }
Теперь, основываясь на нашем подходе, мы можем перебирать массив, используя эту функцию подкачки, для случайного изменения значений.
var shuffleArray = function(array) { var length = array.length; while(length > 0){ let i = Math.floor(Math.random()*length) length-- swap(length, i, array) } return array; };
И вот у вас есть перетасованный массив практически случайным образом.