我正在处理一些coderbyte代码,并注意到当我尝试获取具有相等值undefined
的数组中的max项时,会返回。记录最小值时记录为80
而不是undefined
。这是为什么?
更新代码:
function noRepeat(arr) {
tmp = []
if (arr.length === 2 && arr[0] === arr[1]) {
return arr;
}
for (var i = 0;i<arr.length;i++) {
if (tmp.indexOf(arr[i]) === -1) {
tmp.push(arr[i])
}
}
return tmp
}
function SecondGreatLow(arr) {
arr = noRepeat(arr).sort(function (a,b) {return a-b;});
var low = arr[arr.indexOf(Math.min.apply(Math,arr))+1];
console.log("low",low);
var high = arr[arr.indexOf(Math.max.apply(Math,arr))-1];
console.log("high",high);
return low +" "+high;
}
console.log(SecondGreatLow([80,80]));
输出:
"low" 80
"high" undefined
"80 undefined"
答案 0 :(得分:1)
实际上,那是好的。您想如何在两个相似的数字的数组中找到第二个最大\最小的数字? 它应输出“无解决方案”或其他内容。就像没有空数组的解决方案一样。
function SecondGreatLow(arr)
{
arr = noRepeat(arr).sort(function (a,b) {return a-b;});
if (arr.length < 2)
return "No solution";
console.log("low ", arr[1]);
console.log("high ", arr[arr.length - 2]);
return low + " " + high;
}
您不需要Math min和max函数,因为您的数组已排序且值是唯一的。你需要从开头拿第二个,从结尾拿第二个。
此外,您不需要此部分,因为它是按算法计算的。
if (arr.length === 2)
{
return arr[1] + " " + arr[0];
}
例如,你有一个数组[1,1,2] 你删除重复并获得[1,2] 现在你的算法返回low = arr [1] = 2而high = arr [2 - 2] = arr [0] = 1。 答案是正确的 - 2是第二个最小数字,1是第二个最小数字。