javascript for循环返回不同的值

时间:2014-03-05 17:07:01

标签: javascript

我试图找到数组中从小到大的顺序不在其位置的最大数字。

var input=[ 4, 1, 7, 8, 9, 6, 10,11,12,13, 2, 5, 3 ];
function paramid(input){
var max=0
for (var i=0;i<input.length-1;i++){
    for (var j=1;j<input.length;j++){
        if((input[i]>input[j]) && (input[j]>max)) {max=input[j]}          
    }
}
return max
} 

我预计它会返回6,但它会返回12.为什么?

很抱歉,我不清楚这个问题。输入是一个数字数组。从它的位置到顶部只能有一个数字,直到它从小到大的顺序。输出从第一个到最后一个的数字数组。重新排列需要最少量的动作。

4 个答案:

答案 0 :(得分:1)

您的算法错误,您不需要为此过程使用2 for循环, 它可以用单个for循环来完成

for(i = 0; i < input.length; i++)
{
    if(input[i] > input[i + 1] && input[i + 1] > max) { max = input[i + 1] }
}

答案 1 :(得分:0)

您的输入是

[4, 1, 7, 8, 9, 6, 10, 11, 12, 13, 2, 5, 3]

排序值为

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

13似乎是最不合适的项目。

另一方面,

6是 中最大的项目,与排序数组中的位置相同。

我会这样做:

  • 对数组进行排序
  • 从最后一个位置
  • 开始循环数组的索引
  • 查看是否input[i] == input[j]。如果是这样,请返回

实现:

var input = [4, 1, 7, 8, 9, 6, 10, 11, 12, 13, 2, 5, 3];
var sorted = input.slice(0);
sorted.sort();
for (var i = input.length - 1; i >= 0; i--) {
    if (input[i] == sorted[i]) {
        return input[i]
    }
}
return 0;

答案 2 :(得分:0)

如果我正确地解释你的问题,这就是你要找的。

for(var i=1;i<input.length;i++){
   if((input[i]<input[i-1]) && (input[i]>max)) {max=input[i]}
}

答案 3 :(得分:0)

您可以通过一个循环执行此操作。只需添加count变量并测试元素的值即可。

function paramid(input) {
  var max = 0;
  var count = 1;
  for (var i = 0, l = input.length; i < l; i++) {
    var el = input[i];
    if (el > max && el !== input.indexOf(el) && el === count) {
      max = el;
    }
    count++;
  }
  return max;
}

console.log(paramid(input)) // 6

Fiddle