c++题目描述: 现有 n个正整数,要求出这 n个正整数中的第 k 个最小整数(相同大小的整数只计算一次)。 【输入格式 】 第一行为 n 和 k; 第二行开始为 n 个正整数的值,整数间用空格隔开。 【输出格式】 第k个最小整数的值;若不存在,则输出 NO RESULT。 【输入样例】 5 3 3 2 2 1 【输出样例】 3
时间: 2024-03-23 09:38:46 浏览: 104
这是一个经典的寻找第K小的问题,可以使用快速选择算法来解决。快速选择算法是基于快速排序算法的,其主要思想是通过一次划分操作找到一个元素的位置,然后根据这个元素的位置来判断需要在左边还是右边继续寻找。具体实现可以使用 STL 中的 nth_element 函数来完成。以下是对应的 C++ 代码实现:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
int a[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
nth_element(a, a+k-1, a+n);
int ans = a[k-1];
for (int i = 0; i < k-1; i++) {
if (a[i] == ans) {
ans = -1; // 如果存在相同的数,标记为 -1
break;
}
}
if (ans == -1) {
cout << "NO RESULT" << endl;
} else {
cout << ans << endl;
}
return 0;
}
```
这里使用了 nth_element 函数来找到第 k 小的数,然后遍历前 k-1 个数来判断是否存在相同的数。如果存在相同的数,标记为 -1,并输出 NO RESULT。
阅读全文