查找正整数序列中第k小与第k大元素的两种高效实现方案
可以使用排序或快速选择算法解决这个问题。下面提供两种实现方式: ### 方法一:排序法(简单直观) 对数组升序排序后,第 k 小为 `a[k-1]`,第 k 大为 `a[n-k]`(n 为长度)。 ```python def find_kth_min_max_sort(a, k): if not a or k < 1 or k > len(a): raise ValueError("k must be between 1 and length of array") b = sorted(a) # 升序副本 n = len(b) kth_min = b[k-1] kth_max = b[n-k] return kth_min, kth_max # 示例 a = [3, 2, 1, 5, 6, 4] k = 2 min_val, max_val = find_kth_min_max_sort(a, k) print(f"第 {k} 小: {min_val}, 第 {k} 大: {max_val}") # 输出:第 2 小: 2, 第 2 大: 5 ``` ### 方法二:快速选择(平均 O(n),更高效) 利用 `nth_element` 思想,不完全排序即可定位第 k 小/大元素。Python 中可用 `heapq` 实现: ```python import heapq def find_kth_min_max_heap(a, k): if not a or k < 1 or k > len(a): raise ValueError("k must be between 1 and length of array") n = len(a) # 第 k 小:维护大小为 k 的最大堆(或直接用 heapq.nsmallest) kth_min = heapq.nsmallest(k, a)[-1] # 第 k 大:维护大小为 k 的最小堆(或用 heapq.nlargest) kth_max = heapq.nlargest(k, a)[-1] return kth_min, kth_max # 示例 a = [3, 2, 1, 5, 6, 4] k = 2 min_val, max_val = find_kth_min_max_heap(a, k) print(f"第 {k} 小: {min_val}, 第 {k} 大: {max_val}") # 输出同上 ``` 两种方法均支持重复元素,且结果符合常规定义(如 `[1,2,2,3]` 中第 2 小是 `2`,第 2 大是 `2`)。 ######[AI问答 | 583点数解答 | 2026-03-29 11:34:08]
- 求解特定条件下整数序列的最小值:算法分析与代码实现(字节豆包 | 746点数解答 | 2026-01-24 13:14:40)58
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)346
- 巴黎奥运:中国女排淘汰赛对决土耳其,朱婷成致胜关键!(字节豆包 | 448点数解答 | 2024-08-06 15:59:48)167
- 工程师必备:十大APP性能优化方案大揭秘(百度文心 | 300点数解答 | 2023-11-09 18:31:04)333
- 含不规则缺陷原材料的最优切割方案建模与损失率、利用率计算(DeepSeek | 2367点数解答 | 2025-05-10 23:47:30)265
- Python 实现:统计玩具工厂红蓝色积木数量(字节豆包 | 169点数解答 | 2025-11-11 21:29:06)122
- Python 实现:统计红蓝色积木数量的详细攻略(字节豆包 | 299点数解答 | 2025-11-11 21:30:03)113
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)316
- iOS开发揭秘:序列(Sequence)索引是否从0开始?实例为你解答!(百度文心 | 187点数解答 | 2023-11-09 17:44:38)247
- jQuery 实现动态操作 DOM:打造可增删任务的待办事项列表应用(百度文心 | 1015点数解答 | 2024-10-26 23:41:22)436
- MATLAB实现r5(n)序列离散傅立叶变换及补零至20长序列DFT计算 (GPT | 339点数解答 | 2024-10-28 16:31:47)276
- jQuery 打造实用待办事项列表:输入添加、点击删除一步到位!(阿里通义 | 1139点数解答 | 2024-10-29 08:44:48)352