我正在尝试在Codewars上解决此问题:https://www.codewars.com/kata/largest-difference-in-increasing-indexes/train/javascript
考虑第一个数组中的所有数字对 小于或等于第二个。
从这些中找到一对,它们在数组中的位置是 相距最远。
返回两个数组元素的索引之间的差 这对。
这就是我所拥有的,无法弄清为什么它是不正确的。
var largestDifference = function(data) {
arr = [];
for (var i = 0; i < data.length-1; i++) {
for (var j = data.length-1; j>i; j--) {
if (data[i] <= data[j]) {
arr.push(i)
}
}
}
ans = Math.max(...arr)- Math.min(...arr);
return ans
};
答案 0 :(得分:1)
您无需将i
推送到ans
数组。您需要推动j
和i
之差,即j - i
var largestDifference = function(data) {
let res = [];
for(let i = 0; i < data.length; i++){
for(let j = i + 1; j < data.length; j++){
if(data[i] <= data[j]){
res.push(j - i);
}
}
}
return res.length ? Math.max(...res) : 0
};
console.log(largestDifference([9,4,1,10,3,4,0,-1,-2])) // 4
console.log(largestDifference([3, 2, 1])) // 0
答案 1 :(得分:1)
您不需要收集增量。
相反,如果找到最大值,则可以直接取最大值,并使用该值来防止循环出现不能提供更大最大值的项目。
| | indices | 0 1 2 3 | 4 5 6 7 8 | * | * result values | 9 4 1 10 | 3 4 0 -1 -2 max | * + | - - - - - 3 | * | + - - - 4 | * | - - | * | - ---------------------------------------------------- never visited | | * + - - - | | * - - - | | * - - * data[i] | | * - - data[j] | indices for i | + data[j] match
var largestDifference = function (data) {
var i, j, l = data.length - 1, max = 0;
for (i = 0; i + max < l; i++) {
for (j = l; i + max < j; j--) {
if (data[i] <= data[j] && max < j - i) {
max = j - i;
break;
}
}
}
return max;
};
console.log(largestDifference([9, 4, 1, 10, 3, 4, 0, -1, -2]));
console.log(largestDifference([3, 2, 1]));
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:0)
你快到了;您需要推动索引之间的差异 j - i
,然后取所有差异的Max()
。或者,如果没有,则返回0。
var largestDifference = function(data) {
arr = [];
for (var i = 0; i < data.length - 1; i++) {
for (var j = data.length - 1; j > i; j--) {
if (data[i] <= data[j]) {
arr.push(j - i)
}
}
}
return arr.length > 0 ? Math.max(...arr) : 0;
};
console.log(largestDifference([9, 4, 1, 10, 3, 4, 0, -1, -2]));
// 4 because data[1] <= data[5], so 5 - 1 = 4
console.log(largestDifference([3, 2, 1]));
// 0 because not found
console.log(largestDifference([1, 2, 3]));
// 2, because here j = 2 and i = 0 and 2 - 0 = 2
也可以在没有辅助数组或Max()
的情况下更简单(更有效):
var largestDifference = function(data) {
let result = 0;
for (var i = 0; i < data.length - 1; i++) {
for (var j = data.length - 1; j > i; j--) {
if (data[i] <= data[j] && result < j - i) {
result = j - i;
}
}
}
return result;
};
console.log(largestDifference([9, 4, 1, 10, 3, 4, 0, -1, -2]));
console.log(largestDifference([3, 2, 1]));
console.log(largestDifference([1, 2, 3]));