我一直在解决a hacker rank problem。它的想法是“向左”移动元素在第一个索引n次。问题是我的算法收到一个大型数组。在Hacker Rank服务器中产生超时问题。我不明白这个问题背后的问题。 有人知道发生了什么吗?
我尝试了两个想法
示例输入
5 4
1 2 3 4 5
示例输出
5 1 2 3 4
创意1
function processData(input) {
var input_arguments = input.split(/\n/),
rotations_count = parseInt(input_arguments[0].split(/\s/)[1],10),
array = input_arguments[1].split(/\s/);
while(rotations_count--){
let value = array[0];
array = array.slice(1);
array.push(value);
}
console.log(array.join(' '));
}
Idea2
function processData(input) {
var input_arguments = input.split(/\n/),
rotations_count = parseInt(input_arguments[0].split(/\s/)[1],10),
array = input_arguments[1].split(/\s/);
while(rotations_count > 0){
array.push(array.shift());
rotations_count--;
}
console.log(array.join(' '));
}
答案 0 :(得分:0)
您正在尝试逐个进行轮班,但一个有效的解决方案可以一次性完成一次大转变。 "问题"你失踪的是,轮班的次数告诉你你可以在阵列中的哪个位置"切断它"分成两部分,然后你可以把第一部分添加到第二部分的末尾。使用他们的例子:
let array = [1, 2, 3, 4, 5];
let shifts = 4;
// Create a temp array holding the values of 'array' up the shift point
let temp = array.slice(0, shifts);
// Delete the beginning of 'array' up to shift point
// and add the temp array to the end of 'array'
let newArray = array.splice(shifts).concat(temp);
这就是它的全部内容。