HackerRank leftRotation не проходит большие тестовые случаи - PullRequest
0 голосов
/ 01 апреля 2019

Это описание проблемы hackerRank: Операция поворота влево на массиве размера n сдвигает каждый элемент d массива влево. Например, если левые повороты выполняются для массива [1,2,3,4,5], тогда массив станет [3,4,5,1,2].

Вот моя функция:

function leftRotation() {
    let newArr = [];
    while (d > 0) {
        let first = data.shift();
        newArr.push(first);
        d--;
    }
    return [...data, ...newArr];
   }

но он не проходит большие тестовые случаи, например, с n = 73000, d = 60000,

Заранее спасибо за любую идею.

1 Ответ

0 голосов
/ 01 апреля 2019

Не вращайте N раз.Сдвиг N % (length of array) раз, потому что Допустим, у вас есть массив 5 элементов, и вас попросят сдвинуть его 5 раз, тогда вам по сути не нужно сдвигаться ни разу.

Start : [1, 2, 3, 4, 5]
1: [2, 3, 4, 5, 1]
2: [3, 4, 5, 1, 2]
3: [4, 5, 1, 2, 3]
4: [5, 1, 2, 3, 4]
5: [1, 2, 3, 4, 5]

РЕДАКТИРОВАТЬ:

Вы можете использовать аналогичную логику для оптимизации кода вместо actually shifting элементов в массиве.Например: в случае N = 73000, D = 60000 вы можете splice массив с помощью 73000 % 60000, а затем просто добавить возвращенный объединенный массив к существующему массиву и вернуть его.

...