排序堆栈的字符串和返回顺序

时间:2014-03-04 19:25:44

标签: javascript

以下是问题: 海龟想建立一个金字塔,堆中的每只乌龟都只能在一只大乌龟的顶部。他们唯一可以做的就是爬出然后爬到顶端。由于他们在实现此配置时遇到问题,因此他们会要求您编写一个程序,告诉他们移动的顺序。你必须建议他们,这样才能重新安排最少的动作。

有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

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);

请注意,我编写处理函数的方式不再需要反转数组。

我还强烈建议用分号(;)结束语句。