我正在使用Math.min从数字数组中获取最小的数字。但是,我还需要获得第二小的数字。想知道是否有一种方法可以使用Math.min它来做到这一点,否则正在寻找获得此数字的最佳方法。
这是我所拥有的:
var arr = [15, 37, 9, 21, 55];
var min = Math.min.apply(null, arr.filter(Boolean));
var secondMin; // Get second smallest number from array here
console.log('Smallest number: ' + min);
console.log('Second smallest number: ' + secondMin);Run Code Online (Sandbox Code Playgroud)
我看到您Array.filter在第一分钟使用(但为什么?)。因此,如果我们使用 ES6 特性,您可以通过首先min从数组中删除来找到第二低的值。
var secondMin = Math.min.apply(null, arr.filter(n => n != min));
Run Code Online (Sandbox Code Playgroud)
编辑: 为了清楚起见,除非您Array.filter(Boolean)在计算第一个分钟时做了一些非常聪明的事情,否则您应该将数组传递给它而不进行过滤:
var min = Math.min.apply(null, arr);
Run Code Online (Sandbox Code Playgroud)
只是为了完成该线程:最快的方法是迭代所有元素,就像您可以找到最小值一样。但是根据您的需要,将使用两个变量:第一个最小值(候选)和第二个。
这个逻辑是 O(N) 而排序方法是 O(N lg(N))。
但也许你不应该关心这是否只是为了练习。
如果重复应作为独立值处理(就像 for 一样.sort(...)[1]),则应<=使用它而不是<.
var arr = [15, 37, 9, 21, 55];
var min = Infinity, secondMin = Infinity;
for (var i= 0; i< arr.length; i++) {
if (arr[i]< min) {
secondMin = min;
min = arr[i];
} else if (arr[i]< secondMin) {
secondMin = arr[i];
}
}
console.log('Smallest number: ' + min);
console.log('Second smallest number: ' + secondMin);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7746 次 |
| 最近记录: |