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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

九度 1371 最小的K个数

發布時間:2025/7/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 九度 1371 最小的K个数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述:輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。

輸入:
每個測試案例包括2行:第一行為2個整數n,k(1<=n,k<=200000),表示數組的長度。

?

第二行包含n個整數,表示這n個數,數組中的數的范圍是[0,1000 000 000]。

輸出:
對應每個測試案例,輸出最小的k個數,并按從小到大順序打印。
樣例輸入:
8 4 4 5 1 6 2 7 3 8
樣例輸出:
1 2 3 4

此題的不同之處是最后的輸出結果需要是排序過的,一般是不要求這個的。

?

最常見的解法就是使用快速排序和大頂堆。

方法一使用快速排序的思想,劃分的操作不用改,對遞歸部分稍作修改

1 #include<stdio.h> 2 #include<algorithm> 3 using namespace std; 4 int partition(int arr[], int s, int e){//返回分裂位置 5 int x = arr[s];//中軸元素 6 int j = e+1; 7 int i = s; 8 while(i < j){ 9 while(i < e && arr[++i] <= x); 10 while(j > s && arr[--j] > x); 11 if(i >= j) break; 12 swap(arr[j], arr[i]); 13 } 14 arr[s] = arr[j]; 15 arr[j] = x; 16 return j; 17 } 18 int k; 19 void minK(int arr[],int start,int end){ 20 if(start >= end) return; 21 int index = partition(arr,start,end); 22 if(index == k) return; 23 //類似二分的思想,比快速排序要少一個遞歸 24 if(index > k) minK(arr,start,index-1); 25 else minK(arr,index+1,end); 26 } 27 const int M = 200001; 28 int n,arr[M]; 29 int main() 30 { 31 while(scanf("%d%d",&n, &k) != EOF){ 32 for(int i=0; i<n; i++){ 33 scanf("%d", &arr[i]); 34 } 35 --k; 36 minK(arr,0,n-1); 37 sort(arr,arr+k+1);//輸出結果需要是排序的 38 for(int i=0; i<k; i++) 39 printf("%d ",arr[i]); 40 printf("%d\n",arr[k]); 41 } 42 return 0; 43 } View Code

方法二使用 大頂堆。

1 #include <algorithm> 2 #include <cstdio> 3 using namespace std; 4 int n,k,a[200000]; 5 void adjustHeap(int idx){ 6 int l = idx*2 + 1; 7 int r = idx*2 + 2; 8 int largeIndex = idx; 9 //先檢查邊界。k即為要創建的堆的大小 10 while( l<k || r<k ){ 11 if(l<k && a[l] > a[largeIndex]) largeIndex = l; 12 if(r<k && a[r] > a[largeIndex]) largeIndex = r; 13 if(largeIndex != idx){ 14 //交換 root和子節點。 15 swap(a[idx], a[largeIndex]); 16 //交換之后繼續調整子節點 17 idx = largeIndex; 18 l = idx*2 + 1; 19 r = idx*2 + 2; 20 }else{ 21 break; //無需調整 22 } 23 } 24 } 25 void buildHeap(){ 26 for(int i= (k-1)/2; i>=0; i--){ 27 adjustHeap(i); 28 } 29 } 30 int main(){ 31 while(scanf("%d%d", &n, &k) != EOF){ 32 for(int i = 0; i < k; i++) 33 scanf("%d", &a[i]); 34 buildHeap(); 35 for(int i = k; i < n; i++){ 36 scanf("%d", &a[i]); 37 if(a[0] > a[i]){ 38 swap(a[0],a[i]); 39 adjustHeap(0); 40 } 41 } 42 sort(a,a+k); 43 for(int i = 0; i<k-1; i++) 44 printf("%d ", a[i]); 45 printf("%d\n", a[k-1]); 46 } 47 } View Code

效率差不多

轉載于:https://www.cnblogs.com/qinduanyinghua/p/5693505.html

總結

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

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

主站蜘蛛池模板: 国产精品无码成人网站视频 | 中文字幕国产一区 | 欧美日韩精品在线观看视频 | 国产第二页 | 狂野欧美性猛交xxxx巴西 | 成人免费视频一区 | 台湾一级视频 | 99久久精品免费看国产免费软件 | 国产网红在线观看 | 亚洲在线视频免费观看 | 超碰网址 | 色小姐综合 | 少妇无码av无码专区在线观看 | 欧美日韩精品三区 | av色网站 | 日本xxxxxwwwww | 三上悠亚 电影 | 午夜影院在线观看视频 | 亚洲最大成人在线 | 18禁裸男晨勃露j毛免费观看 | 涩里番在线观看 | 日本久久激情 | 欧美日韩福利视频 | 亚洲天堂国产 | 国产av自拍一区 | 丝瓜色版 | 国产美女诱惑 | 国产老女人乱淫免费 | 国产成人精品一区二区在线观看 | 国产视频精品一区二区三区 | 狠狠操亚洲 | 69av在线视频 | 欧美理论在线观看 | 黄色片视频免费 | 久久99免费视频 | 丰满少妇乱子伦精品看片 | 五月视频| 99热成人 | 伊人精品视频 | 日韩精品成人一区二区在线 | 性农村xxxxx小树林 | 蜜臀av首页 | 诱惑の诱惑筱田优在线播放 | 欧美高清69hd | 亚洲精品免费av | 欧美夜夜爽 | 日韩视频在线视频 | 国产成人精品一区二区在线小狼 | 亚洲涩色 | 国产精品v日韩精品v在线观看 | 免费的毛片网站 | 野外吮她的花蒂高h在线观看 | 奇米精品一区二区三区在线观看一 | 欧美成人69| 人人爱人人搞 | 得得的爱在线视频 | 久久女同 | 办公室摸腿吻胸激情视频 | 99国产成人精品 | 久久久久亚洲精品国产 | 亚洲精品日韩综合观看成人91 | 网站黄在线 | 强行糟蹋人妻hd中文字幕 | 国内毛片毛片毛片 | 久久久久久久久久久久国产精品 | 2024av视频 | 国产视频在线观看视频 | 亚洲一区不卡 | 欧美一区亚洲一区 | 五月天婷婷综合网 | 色播在线视频 | 久久久久久久久久久久久久久久久久 | 日本少妇作爱视频 | 在线免费av网 | 国产欧美日韩三级 | 欧美日韩色图片 | 波多野结衣绝顶大高潮 | 亚洲黄色免费电影 | 献给魔王伊伏洛基亚吧动漫在线观看 | 黄色片xxxx | 后进极品美女白嫩翘臀 | 日本少妇做爰全过程毛片 | 激情五月婷婷综合网 | 国产极品视频在线观看 | 久久黄视频 | 天天操网 | 欧美精品免费一区二区 | av在线地址 | 捆绑少妇玩各种sm调教 | 伊人www22综合色 | 黄a视频| 久艹av| 国产片一区二区 | 最新国产露脸在线观看 | 日本熟妇人妻中出 | wwwwxxxx欧美| 男女午夜激情视频 | 国产精品无码久久久久一区二区 | 97久久人国产精品婷婷 |