求一個數組中第k大的數,我第一印象是冒泡,因為只要冒泡k趟即可,第一趟冒泡第一大,第二次冒泡第二大,第k次冒泡第k大,時間復雜度為O(kn),n為數組長度。但是我們都知道快速排序是對冒泡的改進,降低冒泡的遞歸深度,使時間復雜度降低到O(nlgn),為什么不用快排呢?那么快排的時間復雜度又是 ...
面試南大夏令營的同學說被問到了這個問題,我的第一反應是建小頂堆,但是據他說用的是快排的方法說是O n 的時間復雜度, 但是后來經過我的考證,這個算法在最壞的情況下是O n 的,但是使用堆在一般情況下是O n klogn ,最壞的情況是O nlogn 把兩種方法整理一下,我還是推薦使用小頂堆的方法,因為它不僅可以求第K大,還可以求前K大。。。 一。快排。借用了快排的partition思想,其實是一種 ...
2016-05-17 19:51 0 4384 推薦指數:
求一個數組中第k大的數,我第一印象是冒泡,因為只要冒泡k趟即可,第一趟冒泡第一大,第二次冒泡第二大,第k次冒泡第k大,時間復雜度為O(kn),n為數組長度。但是我們都知道快速排序是對冒泡的改進,降低冒泡的遞歸深度,使時間復雜度降低到O(nlgn),為什么不用快排呢?那么快排的時間復雜度又是 ...
方法一:將這N個數的數組,通過簡單的冒泡排序法,以遞減的順序將數組排序,然后返回第K個元素。 方法二:先把前K個元素拷貝到數組b,以遞減的順序對其排序,然后,將剩下的元素逐個與數組b比較, 如果小於數組b中的第K個元素則忽略,否則將新元素放到數組b中正確的位置上,同時將數組b中的一個 ...
問題描寫敘述:求一個數組的最大k個數。如,{1,5,8,9,11,2,3}的最大三個數應該是,8,9,11 問題分析: 1.解法一:最直觀的做法是將數組從大到小排序,然后選出當中最大的K個數。可是這種解法,復雜度是O(logn*n),可是有時候並不須要排序,用簡單的選擇排序 ...
根據http://www.cnblogs.com/zhjp11/archive/2010/02/26/1674227.html 博客中所總結的7種解法,我挑了其中的解法3和解法6進行了實現。 解法3: 利用快速排序的思想,從數組S中隨機找出一個元素X,把數組分為兩部分Sa和Sb。Sa中的元素 ...
有15個數按由大到小順序存放在一個數組中,輸入一個數,要求用折半查找法找出該數是數組中第幾個元素的值。如果該數不在數組中,則輸出"無此數" 【答案解析】 二分查找是一個非常高效簡單的查找算法,筆試和面試中非常喜歡考察。 折半查找又叫二分查找,查找的前提是序列中元素必須有序,假設區間 ...
有15個數按由大到小順序存放在一個數組中,輸入一個數,要求用折半查找法找出該數是數組中第幾個元素的值。如果該數不在數組中,則輸出"無此數"。 【答案解析】 二分查找是一個非常高效簡單的查找算法,筆試和面試中非常喜歡考察。 折半查找又叫二分查找,查找的前提是序列中元素必須有序,假設區間 ...
有15個數按由大到小順序存放在一個數組中,輸入一個數,要求用折半查找法找出該數是數組中第幾個元素的值。如果該數不在數組中,則輸出"無此數" 【答案解析】 二分查找是一個非常高效簡單的查找算法,筆試和面試中非常喜歡考察。 折半查找又叫二分查找,查找的前提是序列中元素必須有序,假設區間 ...
「HW面試題」 【題目】 給定一個整數數組,如何快速地求出該數組中第k小的數。假如數組為[4,0,1,0,2,3],那么第三小的元素是1 【題目分析】 這道題涉及整數列表排序問題,直接使用sort方法按照ASCII碼排序即可 【解答】 程序源代碼 ...