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


题目描述

给定一个未排序的整数数组(nums)和一个整数 k,请找出数组中前 k 大的元素。你可以假设 0 ≤ k ≤ 数组长度。

示例

输入: nums = [3,2,1,5,6,4], k = 2 输出: [5,6]

PHP 示例代码

function findKthLargest($nums, $k) {
    // 使用 PHP 内置的 sort 函数进行排序(注意这会改变原数组,实际应用中可能需要复制数组)
    rsort($nums); // 逆序排序
    return array_slice($nums, 0, $k); // 截取前 k 大的元素
}

// 示例
$nums = [3, 2, 1, 5, 6, 4];
$k = 2;
$result = findKthLargest($nums, $k);
print_r($result); // 输出: Array ( [0] => 6 [1] => 5 )

// 码小课网站中有更多相关内容分享给大家学习,涵盖算法、数据结构等。

Python 示例代码

def findKthLargest(nums, k):
    # 使用 Python 内置的排序函数进行排序,然后切片
    nums.sort(reverse=True)
    return nums[:k]

# 示例
nums = [3, 2, 1, 5, 6, 4]
k = 2
result = findKthLargest(nums, k)
print(result)  # 输出: [6, 5]

# 码小课网站中有更多相关内容分享给大家学习,包括算法优化、面试技巧等。

JavaScript 示例代码

function findKthLargest(nums, k) {
    // 使用 JavaScript 的 sort 方法进行排序,然后截取前 k 大的元素
    nums.sort((a, b) => b - a); // 降序排序
    return nums.slice(0, k);
}

// 示例
const nums = [3, 2, 1, 5, 6, 4];
const k = 2;
const result = findKthLargest(nums, k);
console.log(result); // 输出: [6, 5]

// 码小课网站中有更多相关内容分享给大家学习,涉及前端、后端、算法等多个领域。

注意

  • 这些示例代码都使用了排序方法,但在处理大数据集时,这种方法可能不是最高效的,因为它需要 O(n log n) 的时间复杂度。对于大数据集,可以考虑使用最小堆(Min Heap)等数据结构来维护前 k 大的元素,这样可以达到 O(n log k) 的时间复杂度。
  • 在实际面试中,了解并讨论不同方法的时间复杂度和空间复杂度是非常重要的。
推荐面试题