Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为数组中的每个元素输出右侧的最大元素_Javascript_Loops - Fatal编程技术网

Javascript 为数组中的每个元素输出右侧的最大元素

Javascript 为数组中的每个元素输出右侧的最大元素,javascript,loops,Javascript,Loops,考虑Arr1的输入=[4,6,3,9,11,5] 我想要一个将数组作为输入的函数。 对于数组中的每个元素,它应该在右边输出第一个较高的值 示例输出:4-6;6 - 9 ; 3 - 9 ; 9-11,11-1,5-1 要求:我希望在不使用嵌套for循环的情况下实现此功能 下面是一个如何做到这一点的例子。其思想是遍历数组,然后查看当前正在查看的元素之后的每个元素,直到找到一个更大的元素。默认情况下,较大的元素或-1被推入第二个数组中进行存储 var Arr1 = [4, 6, 3, 9, 11, 5

考虑Arr1的输入=[4,6,3,9,11,5]

我想要一个将数组作为输入的函数。 对于数组中的每个元素,它应该在右边输出第一个较高的值

示例输出:4-6;6 - 9 ; 3 - 9 ; 9-11,11-1,5-1

要求:我希望在不使用嵌套for循环的情况下实现此功能


下面是一个如何做到这一点的例子。其思想是遍历数组,然后查看当前正在查看的元素之后的每个元素,直到找到一个更大的元素。默认情况下,较大的元素或-1被推入第二个数组中进行存储

var Arr1 = [4, 6, 3, 9, 11, 5];
var Arr2 = [];
for (var i=0;i<Arr1.length;i++) {
    var biggerNumber = -1;
    for (var j=i+1;j<Arr1.length;j++) {
        if (Arr1[j]>Arr1[i]) {
            biggerNumber = Arr1[j];
            break;
        }
    }
    Arr2.push(biggerNumber);
}
//output: 
for(var i=0;i<Arr1.length;i++) {
    console.log(Arr1[i]+" -- "+Arr2[i]);
}
最新答复:


更好的原因:内部循环总共执行Arr1.length操作,因此仍在运行。如何在没有嵌套循环的情况下实现这一点,我仍然不知道。

到目前为止,您尝试了什么?你到底被困在哪里?你能给我们看一些代码吗?请添加更多的代码,这样我们可以帮助你理解you@icke希望我的问题现在可以理解。@AvinashK您添加了代码,这很好,但您的问题中仍然没有问题。你的代码不工作吗?它不做它应该做的吗?其结果与预期有何不同?等等,等等。你的while循环是非常无用的。为什么不简单地使用if呢?嵌套的for循环可能也可以减少,这一点我很清楚。使用它,我可以删除break语句,并且可以在不使用其他if条件的情况下推送-1值。但是我想在不使用嵌套循环的情况下实现它。有什么想法吗?对不起,除了在函数中隐藏第二个内部循环或使用内部执行循环的内置函数之外,我想不出用一个循环来实现这一点的方法。在这个问题上,我们可以用堆栈做些什么吗?我看不出这有什么帮助。我很想知道是否有解决办法,但我想不出。我昨天在一次采访中被问到这个问题。我告诉他一个逻辑,这与我上面的解决方案非常接近。他要求我不要使用嵌套循环。我也想不出更好的办法。当我问他如何改进时,他的确切回答是:使用堆栈。试试看。
var Arr1 = [4, 6, 3, 9, 11, 5];
var Arr2 = [];
for (var i=0;i<Arr1.length;i++) {
    var biggerNumber = -1;
    for (var j=i+1;j<Arr1.length;j++) {
        if (Arr1[j]>Arr1[i]) {
            biggerNumber = Arr1[j];
            break;
        }
    }
    Arr2.push(biggerNumber);
}
//output: 
for(var i=0;i<Arr1.length;i++) {
    console.log(Arr1[i]+" -- "+Arr2[i]);
}
var Arr1 = [4, 6, 3, 9, 11, 5];
var stack=[];
Arr1.forEach(function(i){
    if (stack.length==0 || i<=stack[stack.length-1]) {
        stack.push(i);
    } else {
        while(stack.length>0 && i>stack[stack.length-1]) {
            console.log(i);
            stack.pop();
        }
        stack.push(i);
    }
});
stack.forEach(function(){console.log(-1);});