【每日一题】实现一个函数,找出一个数组中第二大的数字,并返回该数字

80 阅读1分钟

**题目:**实现一个函数,找出一个数组中第二大的数字,并返回该数字。

要求:

  • 输入参数为一个数字数组。

  • 返回值为数组中第二大的数字。

示例:

答案一

function findSecondLargest(arr) {  
    if (arr.length < 2) {    
        return null; // 数组中元素个数小于2,无法找到第二大的数字  
    }  
    var largest = arr[0];  
    var secondLargest = -Infinity;  
    for (var i = 1; i < arr.length; i++) {    
        if (arr[i] > largest) {      
        secondLargest = largest;      
        largest = arr[i];    
        } else if (arr[i] > secondLargest && arr[i] < largest) {      
        secondLargest = arr[i];    
        }  
    }  
    if (secondLargest === -Infinity) {    
    return null; // 无法找到第二大的数字  
    }  return secondLargest;
}

这个问题主要考察了对数组和逻辑判断的处理能力。在面试过程中,你可以要求面试者解释他们的解决方案,并讨论可能的优化方法。

答案二

function findSecondLargest(arr) {  
    if (arr.length < 2) {    
    return null; // 数组中元素个数小于2,无法找到第二大的数字  
    }  // 首先对数组进行排序  
    arr.sort(function(a, b) {    
    return b - a; // 降序排列  
    });  // 返回排序后的第二个元素  
    return arr[1];
}

这种方法首先对数组进行降序排序,然后返回排序后的第二个元素,即第二大的数字。在面试过程中,你可以和面试者讨论不同解决方案的优缺点,以及它们的时间复杂度和空间复杂度。