日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第k小的数

發(fā)布時間:2025/4/5 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第k小的数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鏈接:第k小的數
來源:??途W
數據范圍5e6
題目描述
給你一個長度為n的序列,求序列中第k小數的多少。
輸入描述:

多組輸入,第一行讀入一個整數T表示有T組數據。
每組數據占兩行,第一行為兩個整數n,k,表示數列長度和k。
第二行為n個用空格隔開的整數。

輸出描述:

對于每組數據,輸出它的第k小數是多少。
每組數據之間用空格隔開

示例1
輸入
復制

2
5 2
1 4 2 3 4
3 3
3 2 1

輸出
復制

2
3
分析

STL中的nth_element 函數可以過

下面學習一下nth_element的用法
該函數就是找第n小的數的位置,但是沒有返回值。小于等于n_th的數放在前面,大于等于n_th的數放在后面,但是[begin,nth)和(nth,end)這兩個區(qū)間并不保證有序。
用法:中間放的是nth

nth_element(v.begin(),v.begin()+nth,v.end())

測試代碼

#include<bits/stdc++.h> using namespace std; set<int> s; const int maxn=5e6; int t,n,k; int a[maxn];int read(){int k=0,f=1;char c=getchar();while(c<'0'||c>'9'){if (c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9'){k=k*10+c-'0';c=getchar();}return f*k; } int main(){ scanf("%d%d",&n,&k);for(int i=0;i<n;i++){a[i]=read();}nth_element(a,a+k,a+n);cout<<"nth_element之后:"<<endl;for(int i=0;i<n;i++)cout<<a[i]<<" ";cout<<endl;printf("第%d小的數是:%d",k,a[k]);return 0; }

測試一下

發(fā)現:只有n_th是有序的,前半部分無序,后半部分無序。
ac代碼

#include<bits/stdc++.h> using namespace std; set<int> s; const int maxn=5e6; int t,n,k; int a[maxn];int read(){int k=0,f=1;char c=getchar();while(c<'0'||c>'9'){if (c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9'){k=k*10+c-'0';c=getchar();}return f*k; } int main(){cin>>t;while(t--){scanf("%d%d",&n,&k);for(int i=1;i<=n;i++){a[i]=read();}nth_element(a+1,a+k,a+n+1);cout<<a[k]<<endl;}return 0; }

下面給一種快排的思路

復習一下快排的基本思想
step1:選擇分界點 一般 x=q[(l+r)/2]
step2: 使得左半邊區(qū)間的數小于等于 x,右半邊區(qū)間的數大于等于x
方法是使用頭尾指針,指針的邊界是兩者相遇
step3:遞歸快排左右兩個區(qū)間

這里需要借鑒快排的思想
找第k小的數
step1:選擇分界點:x
step2:記左半邊區(qū)間小于等于k 的個數為S1,右半邊區(qū)間小于等于k的個數為k-S1
如果k≤s1,說明第k小的數一定在左半邊,只需要遞歸左半邊區(qū)間即可
如果k>s1,說明第k小的數一定在右半邊,此時需要遞歸右半邊的區(qū)間。

ac代碼(不含重復的數字)

#include<iostream> #include<algorithm> using namespace std;const int maxn=1e5+10; int n,k,a[maxn]; int quick_sort(int l ,int r, int k){//第k小數是在區(qū)間l和r里面的if(l==r) return a[l];int x=a[l+r>>1];int i=l-1,j=r+1;while(i<j){do i++;while(a[i]<x);do j--;while(a[j]>x);if(i<j) swap(a[i],a[j]);}int sl=j-l+1;if(k<=sl) return quick_sort(l,j,k);else return quick_sort(j+1,r,k-sl);}int main(){scanf("%d%d",&n,&k);for(int i=0;i<n;i++) scanf("%d",&a[i]);cout<< quick_sort(0,n-1,k)<<endl;}

總結

以上是生活随笔為你收集整理的第k小的数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 美日韩一区二区三区 | 天天插天天狠 | 91国内精品野花午夜精品 | 国产真实乱在线更新 | 色啊色| 琪琪色视频 | 欧美丰满熟妇xxxx | 看污网站| 免费看黄色大片 | 精品久久久久久久久久久aⅴ | 亚洲日本在线观看视频 | 一区二区高清在线 | 美女丝袜av | 日日干日日操 | 少妇极品熟妇人妻无码 | 亚洲人成电影在线 | 国外成人免费视频 | 99999视频 | 福利影院av| 亚洲精品一区中文字幕乱码 | 国产精品自拍偷拍视频 | 国产视频观看 | 欧美视频亚洲视频 | 亚洲AV无码一区二区三区性 | 中文字幕精品三区 | 西野翔夫の目の前で犯在线 | 天天躁夜夜躁 | 香蕉91视频| 亚洲最大成人网站 | 99热这里只有精品66 | 波多野结衣中文字幕一区二区 | 久久精品无码一区二区三区 | 亚洲精品久久久蜜桃网尤妮丝 | 日韩视频二区 | 亚洲精品视频三区 | 女人高潮娇喘声mp3 乱色视频 | 在线h网 | 婷婷激情五月综合 | 久久久不卡国产精品一区二区 | xxxx日韩| 老熟妇一区二区 | 久久精品亚洲天堂 | 乖疼润滑双性初h | 四虎精品| 少妇真实被内射视频三四区 | 在线你懂得 | 嫩嫩av| www.youji.com| 五月激情天 | 先锋影音制服丝袜 | 亚洲欧美另类激情 | 国产精品福利一区二区三区 | 18成人在线| 人妻少妇精品无码专区二区 | 人成在线免费视频 | 亚洲熟乱 | 亚洲欧洲成人 | 欧美成人精品在线视频 | 天天插天天搞 | 日本激情小视频 | 久久久久久日产精品 | 日韩精品一区二区三区视频 | 精品国产系列 | 麻豆视频精品 | 国语对白做受按摩的注意事项 | 欧美熟妇激情一区二区三区 | 久久久国产精品久久久 | 欧美aaa一级片| 国精产品一区二区三区 | 久久国内免费视频 | 97超碰人人草| 亚洲国产视频一区二区三区 | 男人影院在线观看 | 欧美性大战久久久久xxx | 日韩a级片在线观看 | 无码粉嫩虎白一线天在线观看 | 91精品综合久久久久久五月天 | 网站免费在线观看 | 中文字字幕在线 | 福利一区二区视频 | 日韩高清国产一区在线 | 天天在线观看 | 九月色婷婷 | 日韩精品无码一区二区三区久久久 | 中文字幕日韩一区二区 | 日韩成人福利 | 激情av在线 | 一二三四视频社区在线 | 啪啪免费| 激情视频久久 | 天堂网在线观看 | 91无打码| 国产一区二区久久久 | 官场艳妇疯狂性关系 | 国产香蕉av | 日本视频不卡 | 久久性网| 宿舍女女闺蜜调教羞辱 | 欧美高清一区二区 |