1. 算法题目解析与实战指南
今天咱们来聊聊LeetCode上几道经典的热门题目:215题"数组中的第K个最大元素"、347题"前K个高频元素"和295题"数据流的中位数"。这三道题都是面试中的常客,特别是涉及排序、堆和分治算法的应用场景。我刷了不下50遍这些题目,总结出了一些实用的解题套路和优化技巧,现在就把这些经验分享给大家。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 215. 数组中的第K个最大元素
2.1 问题理解与暴力解法
题目要求在一个未排序的数组中找到第K个最大的元素。最直观的解法当然是先排序再取第K个元素:
python复制def findKthLargest(nums, k):
nums.sort()
return nums[-k]
这种方法的时间复杂度是O(nlogn),空间复杂度取决于排序算法,通常是O(1)或O(n)。虽然简单,但在面试中显然不够出彩。
2.2 基于快速选择的分治优化
更高效的解法是使用快速选择算法(Quickselect),这是快速排序的变种:
python复制import random
def findKthLargest(nums, k):
def partition(left, right, pivot_index):
pivot = nums[pivot_index]
nums[pivot_index], nums[right] = nums[right], nums[pivot_index]
store_index = left
for i in range(left, right):
if nums[i] < pivot:
nums[store_index], nums[i] = nums[i], nums[store_index]
store_index += 1
nums[right], nums[store_index] = nums[store_index], nums[right]
return store_index
def select(left, right, k_smallest):
if left == right:
return nums[left]
pivot_index = random.randint(left, right)
pivot_index = partition(left, righ
