Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 旋转阵列的问题_Javascript_Algorithm - Fatal编程技术网

Javascript 旋转阵列的问题

Javascript 旋转阵列的问题,javascript,algorithm,Javascript,Algorithm,我正在解决LeetCode上的一个算法挑战,这里是: 给定一个数组,将数组向右旋转k步,其中k为非负 后续行动: 试着提出尽可能多的解决方案,至少有3种不同的方法来解决这个问题。 你能在有额外空间的地方做吗 示例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] 向右旋转两步:[6,7,1,2,3,4,5] 向右旋转3步:[5,6,7,1,2,3,4] 示例2: 输入:nums=[-1,-100

我正在解决LeetCode上的一个算法挑战,这里是:

给定一个数组,将数组向右旋转k步,其中k为非负

后续行动: 试着提出尽可能多的解决方案,至少有3种不同的方法来解决这个问题。 你能在有额外空间的地方做吗

示例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]

向右旋转两步:[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]

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;
 }};
说明:

向右旋转1步:[99,-1,-100,3]

向右旋转两步:[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;
 }};

伙计们,我的解决方案出了什么问题?

看起来效果不错:

var rotate=函数(nums,k){
如果(k==0){
返回nums;
}否则{
const leftPart=nums.slice(0,nums.length-k);
const rightPart=nums.slice(nums.length-k);
const res=rightPart.concat(leftPart);
返回res;
}};

log('Output:',rotate([-1,-100,3,99],2))这是错误的,因为您的解决方案使用了超过O(1)个额外空间

O(1)额外空间意味着您的解决方案无法使用额外内存,其大小取决于输入的大小。在解决方案中,使用总空间等于输入的临时阵列

为了遵守O(1)条件,您必须找到一个使用恒定额外内存大小的解决方案。例如,只有一个数字。

请尝试以下操作:

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]

你说“怎么了?”是什么意思?我觉得这很管用。您是否正在尝试解决后续问题?是什么让您认为您的解决方案是错误的?是否有失败的测试用例?是的,它在25个测试中只通过了9个测试