竞赛
考级
时间复杂度:信我,就是O(n2)O(n^2)O(n2)
【算法分析】 数据较大,采用分治的思想。 快速排序中,当求出划分后的枢轴位置 pospospos 后,将数组划分为了 333 个部分,lll~ pos−1pos-1pos−1、pospospos、pos+1pos+1pos+1~rrr。 如果 kkk 小于 pospospos,只需对左区间继续划分, 如果 kkk 大于 pospospos,只需对右区间继续划分, 如果 kkk 等于 pospospos,a[k]a[k]a[k] 为第 kkk 小的数。 【参考代码】 【时间复杂度】 O(n)O(n)O(n) 【预计得分】 100pts100pts100pts
时间复杂度:O(nlogrn)O(n\log_r n)O(nlogr n) 空间复杂度:O(n+r)O(n + r)O(n+r)
直接上代码
为什么要写那么长的代码?我觉得麻烦 像这样不就完了↓ 写那么长不是自找麻烦吗 根据我的研究,它不像黄题。
根本不用快排啊
题解 加一个团队呗
#include<bits/stdc++.h> using namespace std; int a[100000010]; int main(){ int n,k; cin>>n>>k; for(int i=1;i<=n;i++){ cin>>a[i]; } sort(a+1,a+n+1); for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<=n;i++){ if(i>=k){ cout<<a[k+1]; return 0; } } return 0; }
#include<cstdio> #include<vector> //数据较大,用vector动态数组来储存数字 int n,m; using namespace std; void quick_sort(vector<int> &q,int l,int r){ if(l>=r) return ; } int main(){ vector<int> q; scanf("%d%d",&n,&m ); //scanf()比cin要快很多,tie的话还是不建议,大部分情况下scanf()还是比cin快 } 这道题数据比较大,那正常开一个const常量来开一个数组的话明显是不够的,但如果想要简洁一点的思路那自然是快排后输出第k大的数
提交答案之后,这里将显示提交结果~