青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

jake1036

編程之美-2.5尋求最大的K個數

   尋求最大的k個數

 方法一: 使用partition函數,將數組分為兩組。
            (1)分為兩個組,sa和sb。
            (2)若sa組的個數大于K,則繼續在sa分組中找取最大的K個數字 。
            (3)若sa組中的數字小于K ,其個數為T,則繼續在sb中找取 K-T個數字 。
   具體代碼實現:
        

#include <iostream>
  
using namespace std ;
  
const int N = 8 ; 
  
const int K = 4 ;
  
int partition(int  a[] ,int low , int high) 
  
{
      
int i = low - 1 ;
      
int j = low;
      
      
while(j < high)
      
{
         
if(a[j] >=  a[high])
         
{
           swap( a[i
+1] , a[j]) ;        
           i
++   ;     
         }

         j
++ ;      
      }

      
//最后處理a[high]
      swap(a[i+1] , a[high]) ;  
      
return i + 1;     
  }

  
  
  
int findk(int  a[] , int low , int high , int k)
  
{
      
if(low < high)
      
{
        
int q = partition(a , low , high) ;
        
        
int len = q - low + 1 ; //表示第幾個位置 
        if(len == k)
         
return q ; //返回第k個位置
        else if(len < k) 
         
return findk(a , q + 1 , high , k - len) ;   
       
else
        
return findk(a , low , q - 1, k ) ;
      }

  }

  
  
int main()
  
{
    
int a[N] = {5 ,2 ,66 ,2311 ,1 ,4 ,55} ;
    findk(a , 
0 , N - 1 , K) ;  
    
    
for(int i = 0 ; i < K ; i++)
      cout
<<a[i]<<endl ;
    
    system(
"pause") ;  
    
return 0 ;    
  }
 

 方法二 :
   此種方法為常用方法,建立一個大小為K的堆。每次遍歷數組時,需要判斷是否需要加入堆中。
   堆中存儲著的是最大的k個數字,但是若是需要插入堆中,則需要對堆進行調整時間為o(log k)。
   全部的時間復雜度為o(n * log k)。
  
  這種方法當數據量比較大的時候,比較方便。因為對所有的數據只會遍歷一次,第一種方法則會多次遍歷
  數組。 如果所查找的k的數量比較大。可以考慮先求出k` ,然后再求出看k`+1 到 2 * k`之間的數字,然后
  一次求取。
 
 方法三:
     利用二分的方法求取TOP k問題。
     首先查找 max 和 min,然后計算出 mid = (max + min) / 2
     該算法的實質是尋找最大的K個數中最小的一個。
  
    代碼如下:
    

#include <iostream>
 
using namespace std ; 
 
const int N = 8 ;
 
const int K = 4 ;
 
 
/*
 利用二分的方法求取TOP k問題。
 首先查找 max 和 min,然后計算出 mid = (max + min) / 2
 該算法的實質是尋找最大的K個數中最小的一個。 
 
 
 
*/

 
 
int find(int * a , int x) //查詢出大于或者等于x的元素個數 
 {
     
int sum = 0 ;
     
     
for(int i = 0 ; i < N ; i++ )
     

        
if(a[i] >= x)
          sum
++ ;                
     }

      
return sum ;
 }

 
 
 
 
 
int getK(int * a , int max , int min) //最終max min之間只會存在一個或者多個相同的數字 
 {
     
while(max - min > 1)             //max - min的值應該保證比兩個最小的元素之差要小 
      {
        
int mid = (max + min) / 2 ;
        
int num = find(a , mid) ;    //返回比mid大的數字個數 
        if(num >= K)                 //最大的k個數目都要比min值大 
           min = mid ;               
        
else
           max 
= mid  ;
      }

      cout
<<"end"<<endl;
      
return min ;
 }

 
 
int main()
 
{
   
int a[N] = {542 ,5 ,11 ,554 ,65 ,33 ,2} ;  
   
int x = getK(a , 554 , 2) ; 
   cout
<<x<<endl ; 
   getchar() ; 
   
return 0 ;    
 }
















posted on 2011-07-07 20:43 kahn 閱讀(1378) 評論(1)  編輯 收藏 引用

Feedback

# re: 編程之美-2.5尋求最大的K個數[未登錄] 2014-09-24 22:58 xixi

你確定以上代碼可以運行?
呵呵  回復  更多評論   



只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜影院日韩| 蜜臀av国产精品久久久久| 亚洲一区视频在线观看视频| 亚洲精品欧美日韩| 日韩视频在线免费| 这里只有精品视频在线| 在线午夜精品| 午夜视频一区二区| 另类综合日韩欧美亚洲| 亚洲高清在线| 亚洲精品1区2区| 日韩视频一区二区三区在线播放免费观看 | 亚洲大片在线观看| 亚洲美女黄色| 午夜精品久久一牛影视| 榴莲视频成人在线观看| 国产日韩精品一区二区浪潮av| 日韩一级裸体免费视频| 亚洲国产黄色| 一区二区三区欧美激情| 欧美综合国产精品久久丁香| 美乳少妇欧美精品| 国产精品成人一区| 亚洲欧洲一区二区在线观看| 亚洲综合色噜噜狠狠| 免费试看一区| 亚洲性视频网站| 你懂的视频欧美| 国产欧美日韩三区| 亚洲精品中文字幕在线| 久久久久久9| 9l视频自拍蝌蚪9l视频成人| 老鸭窝亚洲一区二区三区| 国产精品欧美经典| 亚洲裸体在线观看| 女女同性女同一区二区三区91| 亚洲免费一区二区| 欧美精品一区二区三区视频| 亚洲第一精品夜夜躁人人爽 | 亚洲一区二区视频| 欧美刺激性大交免费视频| 国产一区二区成人| 亚洲尤物在线| 亚洲国产视频一区二区| 久久激情久久| 国产酒店精品激情| 亚洲欧美日韩在线播放| 亚洲毛片一区| 欧美1区免费| 亚洲成人影音| 久久久www| 亚洲欧美日韩一区二区| 国产精品国产三级国产aⅴ9色| 亚洲精品一级| 亚洲第一福利视频| 美女尤物久久精品| 亚洲黄色一区| 亚洲高清视频在线观看| 欧美sm重口味系列视频在线观看| 影音先锋中文字幕一区二区| 久久久九九九九| 欧美一区二区三区在线看 | 久久婷婷综合激情| 久久成人精品无人区| 国产视频一区二区在线观看| 久久精品国产第一区二区三区| 午夜精品久久久久久久久| 亚洲高清视频中文字幕| 鲁大师成人一区二区三区| 亚洲高清在线观看| 亚洲高清视频中文字幕| 欧美日本国产在线| 亚洲一区国产一区| 亚洲欧美另类综合偷拍| 国产专区一区| 欧美激情黄色片| 欧美日韩国产999| 亚洲欧美视频| 久久久久久91香蕉国产| 亚洲国产va精品久久久不卡综合| 免费影视亚洲| 欧美精品系列| 久久精品国产精品亚洲综合| 裸体女人亚洲精品一区| 亚洲美女在线视频| 亚洲午夜日本在线观看| 伊人成人在线视频| 亚洲精品欧美日韩| 国产欧美91| 亚洲第一色中文字幕| 国产精品久久久久999| 久久亚洲影音av资源网| 欧美精品一区二区久久婷婷| 午夜精品免费在线| 免费中文日韩| 久久狠狠亚洲综合| 欧美激情第3页| 久久国产婷婷国产香蕉| 欧美激情视频在线播放| 久久国产一二区| 欧美视频一区二区三区在线观看| 久久免费视频在线观看| 欧美日韩精品一二三区| 玖玖玖国产精品| 欧美视频一区二区三区| 欧美激情精品久久久久久久变态 | 欧美日韩hd| 久久久五月婷婷| 欧美日韩国产成人高清视频| 久久综合网络一区二区| 欧美小视频在线| 亚洲国产日韩欧美在线99| 激情欧美一区二区| 亚洲一区二区三区激情| 亚洲精品日韩在线| 欧美在线视频一区| 亚洲主播在线观看| 欧美精品系列| 欧美国产日韩精品| 国产日韩在线一区| 在线视频精品一区| 日韩写真在线| 欧美成人午夜激情| 欧美a级在线| 激情综合五月天| 欧美一级一区| 欧美专区日韩视频| 国产无一区二区| 久久精品国产亚洲一区二区三区| 欧美日韩精品三区| 亚洲性图久久| 亚洲综合首页| 欧美午夜一区二区| 99精品视频一区| 亚洲一区二区精品在线| 欧美日韩小视频| 亚洲毛片在线看| aa级大片欧美三级| 欧美日韩视频在线一区二区| 一本色道久久综合| 亚洲字幕在线观看| 国产精品免费一区二区三区观看| 一区二区三区精品视频| 午夜视频久久久| 国产亚洲欧美日韩一区二区| 欧美一级片一区| 久久一区激情| 亚洲第一页在线| 牛牛国产精品| aa亚洲婷婷| 欧美在线电影| 一区精品在线| 欧美黄免费看| 在线一区日本视频| 久久久综合网站| 亚洲毛片在线看| 国产精品高潮在线| 久久久久久久久久久久久女国产乱| 蜜臀99久久精品久久久久久软件| 最新日韩中文字幕| 欧美日韩在线精品| 亚洲欧洲99久久| 欧美国产一区在线| 亚洲欧美日韩另类| 在线精品国产成人综合| 欧美日韩成人综合| 亚洲专区一区二区三区| 久久先锋影音| 一区二区三区三区在线| 国产夜色精品一区二区av| 欧美本精品男人aⅴ天堂| 中文久久精品| 欧美成人中文字幕在线| 亚洲欧美成人网| 亚洲精品乱码久久久久久| 国产精品专区第二| 欧美1区2区3区| 亚洲女人天堂成人av在线| 免费成年人欧美视频| 亚洲一区欧美激情| 伊人激情综合| 国产精品永久免费在线| 欧美电影在线| 久久久激情视频| 亚洲性图久久| 亚洲欧洲一区| 久久午夜电影| 午夜日韩福利| 亚洲午夜激情网页| 亚洲国产精品久久| 国产日韩精品一区二区浪潮av| 欧美黄色小视频| 久久免费少妇高潮久久精品99| 亚洲午夜激情网页| 日韩视频中午一区| 亚洲第一天堂无码专区| 理论片一区二区在线| 欧美资源在线| 香蕉成人久久| 午夜精品久久久久|