Javascript 旋转阵列的问题
我正在解决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]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
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个测试