javascript - 试图在 javascript 数组中找到第二大的值
问题描述
我试图找到数组中的第二大值,但我的代码返回数组中的第二小值。关于我在哪里错过它的任何指示?假设代码只是简单地向后循环遍历数组,匹配任何小于最大值和“小于”最大值的值。
function getSecondLargest(nums) {
let sNums = nums.sort();
let max = sNums.length - 1;
for (let i = sNums.length; i > 0; i--) {
if (sNums[i] < max && (sNums[i] === (max - 1))) {
return sNums[i];
}
}
}
console.log(getSecondLargest([8,7,9,4,5,6,3,2.10,22,42,101]))
解决方案
您可以按降序对其进行排序并取第二项。
function getSecondLargest(nums) {
return nums.sort((n1,n2) => n2-n1)[1];
}
console.log(getSecondLargest([10,20,40,30,80,90]));
如果有重复,您可以使用它。
function getSecondLargest(nums) {
return nums.sort((n1,n2) => n2-n1).filter(function(item, pos, ary) {
return !pos || item != ary[pos - 1];
})[1];
}
console.log(getSecondLargest([10,20,40,30,80,90,90]));
Tino 代码的问题是找到第二个最大数。它应该是let max = sNums[sNums.length - 1];
而不是let max = sNums.length - 1;
,循环应该从开始sNums.length - 1
并且一直到直到i >= 0
,并且 if 语句只需要将当前值与最大值进行比较。如果没有找到第二大的,则返回 null。Null
表示数组中的所有元素都具有相同的值。
function getSecondLargest(nums) {
let sNums = nums.sort((a,b) => a-b);
let max = sNums[sNums.length - 1];
for (let i = sNums.length - 1; i >= 0; i--) {
if (sNums[i] < max) {
return sNums[i];
}
}
return null;
}
console.log(getSecondLargest([8,7,9,9,4,5,6,3,2]))
推荐阅读
- c# - 使用 Response.TransmitFile 时出现网络故障
- bash - Bash - 通过子脚本传递参数调用主脚本的函数
- javascript - 在 D3 v5 中以编程方式停止 dragmove 事件
- python - Python 类自变量未转移到函数 (discord.py)
- sql - 是否可以使用标准 SQL 在 Google BigQuery 中安排查询,以便日期范围在运行时每天递增?
- android - 发布大型请求时如何解决来自 Timimg Out 的改造写入
- apache-spark - 我们将使用 pyspark 来构建项目吗?
- php - 如何在整个会话中为访客用户分配唯一 ID
- tensorflow - 在 tf.keras.metrics.Recall 中使用 thesholds 参数
- django - 我正在尝试更新嵌套序列化程序,它给了我一个错误 paper_description 与此 id 已经存在?