• <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>

            jake1036

            面試100題--05查找TPO k

                        面試題100---05 查找TOPK

            從數組中找出最小的K個數
             最笨的方法:對原數組進行排序,這樣的話其復雜度為o(nlogn)
             下面介紹一個o(n+logk n)的方法 ,最后再介紹一個方法,實現對k數組不需要排序,但是需要一個輔助堆棧
             
             新建一個輔助堆棧k,插入數組時,若k數組中的數組,不足k。則直接插入元素。
             若k數組中的數目。已經為k,則需要找出數組中的最大值。并與要插入的值x進行比較,若值x大于最大值,則忽略。否則將最大值替換為x。
             上述說明的方法,其復雜度為o(n + logK * n)。
             使用一個堆,來存放k數組,以盡可能快地進行max運算。

            #include <iostream>
            #include 
            <vector>
            #include 
            <iterator>
            #include 
            <set>
             
            using namespace std ;
             typedef multiset 
            <int , greater<int> > heap ;
             

             
            const int K = 5 ;
             
            const int N = 10 ;
             
            int main()
             
            {
                
            int i , x;
                vector
            <int> vdata ; //存儲數據元素 
               heap kdata ; //存儲k個元素  
              
             
             
                
            for( i = 0 ;i < N ; i++ )
                
            {
                     cin
            >>x ;
                     vdata.push_back(x) ; 
                }

                
                vector
            <int>::const_iterator iter = vdata.begin() ;
                
            for(;iter != vdata.end() ; iter++)
                
            {
                     
            if(kdata.size() < K)
                     
            {
                       kdata.insert(
            *iter) ; //直接插入元素                                  
                     }
             
                     
            //kdata中存儲的元素個數大于K
                     else      
                     
            {
                            heap::iterator iterFirst 
            = kdata.begin() ;
                            
            if(*iter < *iterFirst)
                             
            {
                               kdata.erase(iterFirst) ;
                               kdata.insert(
            *iter) ;        
                             }

                               
                     }
                  
                }

                heap::iterator iters 
            = kdata.begin() ;
                
            for(; iters != kdata.end() ;iters++)
                
            {
                      cout
            <<*iters<<" " ;
                }

              
                system(
            "pause") ;      
                
            return 0 ;   
             }

             

               

            posted on 2011-05-16 11:22 kahn 閱讀(283) 評論(0)  編輯 收藏 引用 所屬分類: 算法相關

            久久777国产线看观看精品| 精品久久久久久久国产潘金莲| 国产毛片欧美毛片久久久| 亚洲色欲久久久综合网| 国产精品一久久香蕉国产线看 | 久久久精品日本一区二区三区| 亚洲国产成人精品女人久久久| 亚洲成色www久久网站夜月 | 久久九九兔免费精品6| 国产亚洲精久久久久久无码| 久久影视综合亚洲| 久久精品国产亚洲AV麻豆网站| 久久久久亚洲AV无码专区网站 | 91麻精品国产91久久久久| 亚洲人成电影网站久久| 日本道色综合久久影院| 久久久久亚洲AV无码网站| 要久久爱在线免费观看| 狠狠人妻久久久久久综合蜜桃| 2020久久精品亚洲热综合一本| 久久se这里只有精品| 91久久精品无码一区二区毛片| 色婷婷综合久久久久中文一区二区| 久久国产热这里只有精品| 久久久久久a亚洲欧洲aⅴ| 久久久久久亚洲Av无码精品专口| 亚洲精品美女久久久久99小说 | 久久人妻无码中文字幕| 久久久久久久久久久免费精品| 2021久久国自产拍精品| 久久精品国产99久久久| 亚洲国产精品无码久久SM| 久久精品国产久精国产一老狼| 欧美国产成人久久精品| 久久人人爽人人爽人人片AV东京热 | 久久久久亚洲精品无码网址 | 香蕉久久夜色精品国产尤物| 久久青青草原亚洲av无码 | 久久99精品久久久久久动态图 | 精品国产婷婷久久久| 精品国产乱码久久久久久浪潮|