酷代码 AI
菜单

现有一个正整数序列 a [ i ] a[i] ,请你编程程序,找到该序列中第 k k 大的元素,以及序列中第 k k 小的元素。 输入格式 共两行, 第一行,两个正整数,依次为 n n 和 k k; 第二行, n n 个正整数 a [ i ] a[i],数与数之间间隔一个空格。 输出格式 一行,两个正整数,依次表示序列中第 k k 大的元素和第 k k 小的元素,中间以一个空格间隔。c++

```cpp #include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { int n, k; cin >> n >> k; vector<int> a(n); // 读取序列中的元素 for (int i = 0; i < n; i++) { cin >> a[i]; } // 复制一份序列,避免排序影响后续查找 vector<int> sorted_a = a; sort(sorted_a.begin(), sorted_a.end()); // 第 k 小的元素 int kth_smallest = sorted_a[k - 1]; // 第 k 大的元素 int kth_largest = sorted_a[n - k]; // 输出结果 cout << kth_largest << " " << kth_smallest; return 0; } ``` 代码解释: 1. 输入处理:首先读取两个整数`n`和`k`,`n`表示序列的长度,`k`用于查找第`k`大或第`k`小的元素。接着读取`n`个正整数,存储在`vector`容器`a`中。 2. 排序操作:为了不影响原序列,将`a`复制到`sorted_a`,并使用`sort`函数对`sorted_a`进行升序排序。 3. 查找第`k`小和第`k`大的元素:在升序排序的序列中,第`k`小的元素位于索引`k - 1`处,第`k`大的元素位于索引`n - k`处。 4. 输出结果:将第`k`大的元素和第`k`小的元素输出,中间用空格分隔。 复杂度分析: - 时间复杂度:排序操作的时间复杂度为$O(n log n)$,其中`n`是序列的长度。 - 空间复杂度:由于复制了一份序列,空间复杂度为$O(n)$。 [2026-01-24 16:47:56 | AI问答 | 466点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多