利用排序快速计算第k大与第k小的差值
好的,针对您所描述的题目,这是一个典型的利用排序后直接取值并计算差值的算法问题。下面我会分步骤说明解决方案,并给出完整的代码实现。 ## 📘 题目分析 题目要求我们从一个正整数序列中,分别找出**第k大的数**和**第k小的数**,然后计算二者的差值。 **关键点理解** - 第k小的数:从小到大排序,索引为k-1(因为数组从0开始)。 - 第k大的数:从小到大排序,倒数第k个数,索引为`n - k`。 - `n`最大10000,使用快速排序或内置排序函数完全可行。 ## 🧩 算法思路 1. 读取输入 `n` 和 `k`,以及整个数列。 2. 对数列进行升序排序。 3. 第k小的数 = `sorted_array[k-1]` 4. 第k大的数 = `sorted_array[n-k]` 5. 输出差值:第k大的数减去第k小的数。 ## 🛠️ 代码实现(C++ 为例) ```cpp #include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { int n, k; cin >> n >> k; vector<int> arr(n); for (int i = 0; i < n; ++i) { cin >> arr[i]; } // 升序排序 sort(arr.begin(), arr.end()); int kth_small = arr[k - 1]; int kth_large = arr[n - k]; int result = kth_large - kth_small; cout << result << endl; return 0; } ``` ## 📌 代码注释说明 - `sort(arr.begin(), arr.end())`:对数组进行升序排序。 - `arr[k-1]`:第k小的元素(因为排序后索引0对应第1小)。 - `arr[n-k]`:第k大的元素(倒数第k个,索引从0开始)。 - 直接相减得到结果,无需额外判断符号(题目保证大数减小数不会为负数,因为第k大的数总是大于等于第k小的数)。 ## 🧪 测试样例验证 **样例1** ``` 输入: 3 1 5 1 3 排序后:[1, 3, 5] 第1小 = 1,第1大 = 5 差值 = 4 ✅ ``` **样例2** ``` 输入: 5 2 3 2 5 1 4 排序后:[1, 2, 3, 4, 5] 第2小 = 2,第2大 = 4 差值 = 2 ✅ ``` ## 🎯 时间和空间复杂度 - 时间复杂度:O(n log n),主要由排序决定,适合n≤10000。 - 空间复杂度:O(n),用于存储原序列。 ######[AI问答 | 662点数解答 | 2026-05-31 21:36:40]
- 用Python轻松将PPT每页转为图片,附代码示例!(阿里通义 | 315点数解答 | 2024-04-23 10:01:04)1410
- Winform开发:含验证与清空功能的注册页面实现(GPT | 5266点数解答 | 2024-06-14 16:04:40)504
- Python 实战:购物折扣计算、列表求和与平方数推导代码全解(字节豆包 | 235点数解答 | 2024-10-28 14:46:54)247
- Python 实现:在 Windows 系统将 PPT 每页轻松转为图片(百度文心 | 692点数解答 | 2024-10-30 18:08:44)403
- Python 实现飞机票款计算:含舱位折扣逻辑与异常处理指南(字节豆包 | 539点数解答 | 2024-12-01 13:10:00)195
- Python 实现:轻松将 PPT 每页转换为图片(DeepSeek | 462点数解答 | 2025-02-17 17:26:45)292
- 多订单窗框切割难题:整数规划求解实现 35000 元利润与 95%利用率(DeepSeek | 1809点数解答 | 2025-05-01 16:57:40)259
- 优化高中英语核心词汇短语HTML页面,这些建议不容错过!(DeepSeek | 217点数解答 | 2025-07-01 23:41:02)213
- C++ 代码实现自定义运算 x@y = x² + y² - xy 及 x@(x+y) 计算(DeepSeek | 215点数解答 | 2025-12-13 15:08:14)111
- C++ 实现根据输入正整数奇偶性计算偶数和或约数和(字节豆包 | 838点数解答 | 2026-02-28 20:23:59)80
- 解决代码WA问题:修改整数溢出问题后的计算代码(字节豆包 | 749点数解答 | 2026-05-10 16:20:03)28
- 修正代码解决计算 f(l, r) 和出现的 WA 问题(字节豆包 | 806点数解答 | 2026-05-10 16:21:37)29