我试图找到数组中从小到大的顺序不在其位置的最大数字。
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.为什么?
很抱歉,我不清楚这个问题。输入是一个数字数组。从它的位置到顶部只能有一个数字,直到它从小到大的顺序。输出从第一个到最后一个的数字数组。重新排列需要最少量的动作。
答案 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)
如果我正确地解释你的问题,这就是你要找的。 p>
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