C++ 求第k大减第k小值:排序后直接计算
## 🧮 解题思路 题目要求计算第 k 大的数减去第 k 小的数。 核心在于:序列排序后,第 k 小的数位于下标 `k-1`(0-indexed),第 k 大的数位于下标 `n-k`。 直接对数组排序,然后计算 `arr[n-k] - arr[k-1]` 即可。时间复杂度 O(n log n),空间复杂度 O(1)(若允许原地排序)。 ## 💻 C++ 实现 ```cpp #include <iostream> #include <vector> #include <algorithm> 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_smallest = arr[k-1]; int kth_largest = arr[n-k]; cout << kth_largest - kth_smallest << endl; return 0; } ``` ## 📊 复杂度分析 - 时间复杂度:O(n log n),主要来自排序。 - 空间复杂度:O(1) 额外空间(不考虑输入存储)。 ## ⚠️ 注意事项 - 输入保证 `k ≤ n`,且所有数为正整数。 - 若 `k = 1`,则第 1 小为最小值,第 1 大为最大值,结果为正数或零。 - 使用 `long long` 可避免极端数据溢出(题目未说明范围,建议改用 `long long` 类型更安全)。 ######[AI问答 | 379点数解答 | 2026-08-09 22:09:32]
- C++ 代码实现自定义运算 x@y = x² + y² - xy 及 x@(x+y) 计算(DeepSeek | 215点数解答 | 2025-12-13 15:08:14)181
- C++ 实现根据输入正整数奇偶性计算偶数和或约数和(字节豆包 | 838点数解答 | 2026-02-28 20:23:59)158
- 解决代码WA问题:修改整数溢出问题后的计算代码(字节豆包 | 749点数解答 | 2026-05-10 16:20:03)92
- 修正代码解决计算 f(l, r) 和出现的 WA 问题(字节豆包 | 806点数解答 | 2026-05-10 16:21:37)87
- C语言实现多班级学生信息管理系统:含增删改查与多样排序功能(GPT | 2547点数解答 | 2024-12-15 22:08:58)427
- C语言实现学生信息管理系统:含增删改查与多种排序功能(GPT | 6408点数解答 | 2024-12-15 22:10:03)432
- sys_module 表结构与 Java 实体类 SysModule 详解(字节豆包 | 252点数解答 | 2025-04-09 10:54:17)251
- MySQL表与Java类:`sys_role` 的创建及实体类定义全解析(字节豆包 | 168点数解答 | 2025-04-10 14:39:47)262
- C++ 破解“国王游戏”弱化版:贪心排序算法巧求最少最大奖赏(DeepSeek | 550点数解答 | 2025-04-28 18:16:50)499
- 巧妙贪心排序:解决国王游戏中大臣奖赏最大化问题(DeepSeek | 1002点数解答 | 2025-05-10 20:58:15)244
- C++ 实现:用贪心算法解国王游戏(弱化版),使大臣获赏最大值最小(DeepSeek | 507点数解答 | 2025-05-10 20:59:01)231
- 6 - 4 军事体能成绩冒泡排序:输入轮数输出中间结果的实现(字节豆包 | 250点数解答 | 2025-12-25 15:42:51)89