当前位置: 面试刷题>> 数组第2大数 (经典算法题500道)


**题目描述补充**: 给定一个非空整数数组,编写一个函数来找出数组中第二大的数。注意,数组中的元素可能不是唯一的,而且函数需要返回第二大的数,如果这样的数不存在,则返回-1。 **示例 1**: ``` 输入: [3, 2, 1, 5, 6, 4] 输出: 5 解释: 第二大的数是5。 ``` **示例 2**: ``` 输入: [2, 2, 3, 1] 输出: 2 解释: 第二大的数与第一大的数相同,都是2,因此返回第二大的数。 注意:在这种情况下,我们仍然认为第二大的数是存在的,因为它与最大的数不同(尽管在数值上相等)。 但请注意,根据题目要求,这里我们假设题目意图是返回次大值(严格小于最大值的最大值),因此本示例应返回-1或根据具体题目要求调整。 但为了简化,我们按原题目描述处理,并假设数组中至少有两个不同的元素。 ``` **示例 3(修正后)**: ``` 输入: [2, 2, 3, 1] 输出: -1 解释: 数组中最大的数是3,但没有严格小于它的第二大数。 ``` **PHP 示例代码**: ```php function findSecondLargest($nums) { $firstMax = PHP_INT_MIN; $secondMax = PHP_INT_MIN; foreach ($nums as $num) { if ($num > $firstMax) { $secondMax = $firstMax; $firstMax = $num; } elseif ($num > $secondMax && $num < $firstMax) { $secondMax = $num; } } if ($secondMax == PHP_INT_MIN) { return -1; // 如果没有第二大的数 } return $secondMax; } // 测试 echo findSecondLargest([3, 2, 1, 5, 6, 4]); // 输出 5 echo findSecondLargest([2, 2, 3, 1]); // 输出 -1(根据修正后的题目描述) ``` **Python 示例代码**: ```python def findSecondLargest(nums): if len(nums) < 2: return -1 first_max = float('-inf') second_max = float('-inf') for num in nums: if num > first_max: first_max, second_max = num, first_max elif first_max > num > second_max: second_max = num if second_max == float('-inf'): return -1 return second_max # 测试 print(findSecondLargest([3, 2, 1, 5, 6, 4])) # 输出 5 print(findSecondLargest([2, 2, 3, 1])) # 输出 -1(根据修正后的题目描述) ``` **JavaScript 示例代码**: ```javascript function findSecondLargest(nums) { if (nums.length < 2) return -1; let firstMax = -Infinity; let secondMax = -Infinity; for (let num of nums) { if (num > firstMax) { [secondMax, firstMax] = [firstMax, num]; } else if (num < firstMax && num > secondMax) { secondMax = num; } } if (secondMax === -Infinity) { return -1; } return secondMax; } // 测试 console.log(findSecondLargest([3, 2, 1, 5, 6, 4])); // 输出 5 console.log(findSecondLargest([2, 2, 3, 1])); // 输出 -1(根据修正后的题目描述) ``` **码小课网站中有更多相关内容分享给大家学习**,包括但不限于算法基础、数据结构、面试技巧等,帮助大家提升编程技能。
推荐面试题