关注
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <sstream>
using namespace std;
int partition(vector<int> &arr, int i, int j)
{
int I = i;
while (i < j)
{
while (i < j && arr[j] >= arr[I]) --j;
while (i < j && arr[i] <= arr[I]) ++i;
if (i < j) std::swap(arr[i], arr[j]);
}
std::swap(arr[i], arr[I]);
return i;
}
int get_least_k(vector<int> &vec_input, int k)
{
int n = vec_input.size();
if (n == 0 || k <= 0 || k > n)
return 0;
int start_index = 0;
int end_index = n - 1;
int index = partition(vec_input, start_index, end_index);
while (index != k - 1) // 当分划元素的下标是k-1时,意味着前k-1个数比次数小(不大于),后边的数比次数大(不小于)
{
if (index > k - 1)
index = partition(vec_input, start_index, index - 1);
else if (index <= k - 1)
index = partition(vec_input, index + 1, end_index);
}
return vec_input[index];
}
int main()
{
vector<int> vec_num;
int val;
string line;
stringstream ss;
getline(cin, line);
ss.clear();
ss << line;
while (!ss.eof())
{
ss >> val;
vec_num.push_back(val);
}
int k;
cin >> k;
cout << get_least_k(vec_num,vec_num.size() + 1 - k) << endl;
return 0;
}
查看原帖
点赞 3
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 去年的flag与今年的小目标 #
1588次浏览 52人参与
# 应届生应该先就业还是先择业 #
160542次浏览 807人参与
# 26年哪些行业会变好/更差 #
2522次浏览 46人参与
# 写论文的崩溃时刻 #
1290次浏览 28人参与
# 你都用AI做什么 #
1780次浏览 55人参与
# 有深度的简历长什么样? #
4544次浏览 75人参与
# 卷__卷不过你们,只能卷__了 #
1087次浏览 26人参与
# 入职第一天 #
3818次浏览 46人参与
# 哪些公司在招寒假实习? #
1241次浏览 24人参与
# 秋招你被哪家公司挂了? #
997761次浏览 7652人参与
# 一人分享一道面试手撕题 #
7548次浏览 394人参与
# 你不能接受的企业文化有哪些 #
2422次浏览 54人参与
# 这个工作能去吗 #
99362次浏览 612人参与
# 跳槽时有那些注意事项 #
117441次浏览 585人参与
# 小米求职进展汇总 #
997901次浏览 6501人参与
# 机械应届生薪资要多少才合适? #
35338次浏览 106人参与
# 机械人的薪资开到多少,才适合去? #
158216次浏览 553人参与
# 非技术岗薪资爆料 #
470845次浏览 3015人参与
# 一份好的简历长什么样? #
21816次浏览 412人参与
# 你觉得机械有必要实习吗? #
16955次浏览 97人参与
查看1道真题和解析