当前位置: 面试刷题>> 数组中的第K个最大元素(经典算法150题)
### 题目描述
给定一个未排序的整数数组 `nums` 和一个整数 `k`,请找出数组中第 `k` 个最大的元素。请注意,这里排序是降序的,即第 `k` 个最大元素是排序后数组中倒数第 `k` 个元素。
**示例 1**:
```
输入: nums = [3,2,1,5,6,4], k = 2
输出: 5
```
**示例 2**:
```
输入: nums = [3,2,3,1,2,4,5,5,6], k = 4
输出: 4
```
**注意**:
- 你可以假设 `k` 总是有效的,即 `1 ≤ k ≤ nums.length`。
### PHP 示例代码
```php
function findKthLargest($nums, $k) {
// 使用 PHP 内置的排序函数,然后直接返回结果
rsort($nums); // 降序排序
return $nums[$k - 1]; // 数组索引从0开始,所以取第k-1个元素
}
// 示例
$nums = [3,2,1,5,6,4];
$k = 2;
echo findKthLargest($nums, $k); // 输出 5
```
### Python 示例代码
```python
def findKthLargest(nums, k):
# 使用 Python 内置的排序函数,然后返回结果
nums.sort(reverse=True) # 降序排序
return nums[k-1] # 数组索引从0开始,所以取第k-1个元素
# 示例
nums = [3,2,1,5,6,4]
k = 2
print(findKthLargest(nums, k)) # 输出 5
```
### JavaScript 示例代码
```javascript
function findKthLargest(nums, k) {
// 使用 JavaScript 的排序函数,然后返回结果
nums.sort((a, b) => b - a); // 降序排序
return nums[k - 1]; // 数组索引从0开始,所以取第k-1个元素
}
// 示例
const nums = [3,2,1,5,6,4];
const k = 2;
console.log(findKthLargest(nums, k)); // 输出 5
```
### 注意事项
- 在实际面试中,如果面试官要求不使用排序函数,那么可能需要使用更高效的算法,如快速选择算法(QuickSelect),该算法的平均时间复杂度为 O(n),但最坏情况下为 O(n^2)。
- 排序方法虽然简单直观,但在处理大数据集时可能不是最高效的选择。
- 在实际编码时,还需要考虑输入数据的边界条件和异常情况,例如空数组或 `k` 的值超出数组长度范围等。