проблемы с вращением массива - PullRequest
1 голос
/ 03 августа 2020

Я решаю задачу algorihmi c на LeetCode, вот она:

Для данного массива поверните массив вправо на k шагов, где k неотрицательно.

Последующие действия: постарайтесь найти как можно больше решений, существует как минимум 3 различных способа решения этой проблемы. Не могли бы вы сделать это на месте с дополнительным пространством O (1)?

Пример 1:

Ввод: nums = [1,2,3,4,5 , 6,7], k = 3

Вывод: [5,6,7,1,2,3,4]

Пояснение:

поворот на 1 шаг, чтобы вправо: [7,1,2,3,4,5,6]

повернуть на 2 шага вправо: [6,7,1,2,3,4,5]

поворот на 3 шага вправо: [5,6,7,1,2,3,4]

Пример 2: Ввод: nums = [-1, -100, 3,99], k = 2

Вывод: [3,99, -1, -100]

Пояснение:

поворот на 1 шаг вправо: [99 , -1, -100,3]

повернуть на 2 шага вправо: [3,99, -1, -100]

var rotate = function(nums, k) {
 if(k === 0){
     return nums;
 } else{
     
 
    const leftPart = nums.slice(0, nums.length - k);
    const rightPart = nums.slice(nums.length - k);
    const res = rightPart.concat(leftPart);
    return res;
 }};

Что не так с моим решением, ребята?

Ответы [ 4 ]

1 голос
/ 03 августа 2020

Это неверно, потому что ваше решение использует больше, чем O (1) дополнительного пространства.

O (1) дополнительное пространство означает, что ваше решение не может использовать дополнительную память с размером, зависящим от размера ввод. В своем решении вы используете временные массивы с общим пространством, равным вводу.

Чтобы соблюдать условие O (1), вы должны найти решение, используя постоянный дополнительный размер памяти. Например, всего 1 число.

0 голосов
/ 03 августа 2020

Попробуйте следующее:

var rotate = function(input, k) {
    let result = [];
    while(k>0){
        result.unshift(input.pop())
        k--;
    }
    return(result.concat(input))
};

Пример 1:

let nums = [1,2,3,4,5,6,7];
let k = 3;

nums = rotate(nums,k) //[5,6,7,1,2,3,4]
0 голосов
/ 03 августа 2020
let arr = [1,2,3,4,5];
let timesToRotate = 5;
while(timesToRotate > 0) {
  arr.unshift(arr.pop());
  timesToRotate -= 1;
}
0 голосов
/ 03 августа 2020

Похоже, работает Ок:

var rotate = function(nums, k) {
  if(k === 0){
    return nums;
  } else{   
    const leftPart = nums.slice(0, nums.length - k);
    const rightPart = nums.slice(nums.length - k);
    const res = rightPart.concat(leftPart);
    return res;
}};
    
console.log('Output:', rotate([-1,-100,3,99], 2));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...