以下是问题: 海龟想建立一个金字塔,堆中的每只乌龟都只能在一只大乌龟的顶部。他们唯一可以做的就是爬出然后爬到顶端。由于他们在实现此配置时遇到问题,因此他们会要求您编写一个程序,告诉他们移动的顺序。你必须建议他们,这样才能重新安排最少的动作。
有N只海龟,由它们的大小表示为区间[1,N]中的数字(包括1和N)。例如:N = 3表示有3只海龟,它们的大小为:1,2,3。
代码中的“BMC_TEST_INPUT_MAGIC”(带引号)将替换为输入的实际值。输入是从上到下的当前海龟堆,每行一只乌龟。程序必须输出需要按顺序移动的名称。打印的名字将首先移动。
示例输入:
5
1
3
2
4
示例输出:
4
3
2
1
起初我试图通过以下方式解决它:
var input="BMC_TEST_INPUT_MAGIC".split("\n").sort().reverse()
var res=input.slice(0,input.length-2).join("\n")
console.log(res)
然后我得到一个错误“对象没有切片方法”。为什么字符串输入在sort()之后成为对象?什么是解决这个问题的正确方法?
然后我尝试修改它:
var input="BMC_TEST_INPUT_MAGIC".split("\n").sort().reverse()
var res=Array.prototype.slice.call(input,1,input.length).join("\n")
console.log(res)
它通过简单的测试“5 \ n4 \ n3 \ n \ 2 \ n1”,但在输入较大时失败。
没有错误,但它无法通过我不知道输入的添加测试。 我可以看到其他人通过测试的解决方案。
var input = "BMC_TEST_INPUT_MAGIC".split('\n').map(function(i){
return parseInt(i,10);
});
//var input = [ 4, 1, 7, 8, 9, 6, 10,11,12,13, 2, 5, 3 ];
var max=0;
// Find max value thats not on position - starting 'turtle'
for(var i=1;i<input.length;i++){
for(var j=0;j<i;j++){
if((input[i] < input[j]) && (input[i] > max)){ max = input[i]; };
}
}
for(var i=max;i>0;i--){
console.log(i);
}
在一次测试中,我的解决方案输出: 9 8 7 6 五 4 3 2 1
然而他的解决方案输出: 6 五 4 3 2 1
答案 0 :(得分:0)
所以你有一个字符串。此字符串被拆分为一个字符串数组(基于新行)。 Javascript的字符串数组的默认排序行为是按字母顺序排列的。按字母顺序,字符串“10”出现在字符串“2”之前。所以你需要以数字方式将处理函数传递给sort函数。
function handler(a, b) {
return b - a;
}
并使用此处理程序函数作为参数调用sort函数
var input = "BMC_TEST_INPUT_MAGIC".split("\n").sort(handler);
请注意,我编写处理函数的方式不再需要反转数组。
我还强烈建议用分号(;)结束语句。