題目描述:給定乙個陣列,輸出該陣列前k小數(無需排序)
示例:input: nums = k = 7
output: result =
題解:這道題目有兩種解題方法,一是使用排序的演算法讓陣列從小到大排好序,然後依次輸出陣列的前k個整數。
這樣的做法對人而言雖然簡單可操作性,但因為題目沒有對陣列排序的要求,使用排序演算法無疑讓計算機做了額外的工作。
另一種「偷懶」的做法是使用分治的思想,將原來的大陣列不斷地按照要求劃分成更小的陣列,最後得到乙個長度為k的子陣列,且該子陣列內的所有元素的值都小於不在這個子陣列內的元素的值。
演算法的核心是,對於乙個陣列,選定陣列第乙個元素為pivot,然後遍歷該陣列,分別將值小於pivot、等於pivot、大於pivot的元素存放在陣列l、m、r內,並計算三個陣列的元素值分別為a、b、c
進行判斷:
1.若k<=a,則前k小數全部落在陣列l內,則繼續對l進行遞迴呼叫,引數k不變
2.若k>a+b,則前k小數包括了陣列l、m的全部元素,還有部分在r內,則對r進行遞迴呼叫,引數k變為k-a-b,然後將返回的陣列與l、m合併
3.其他情況,說明第k小數恰好在m內,則將l、m合併
源**:
vectorpartition(vectorv, int k)
int a = l.size();
int b = m.size();
int c = r.size();
if (k <= a) return partition(l, k);
else if (k > a + b)
else
}
Python 第(前)K大(小)數問題
指的是在長度為n n k 的亂序陣列中找出從大到小順序的第 前 k個數的問題。假設陣列長度為n,首先取前k個數,構建最小堆,將剩餘n k個元素,依次與堆頂元素進行比較,若大於堆頂元素,則替換,並重新為最小堆。構建最小堆 def min heap self,parent,heap child 2 pa...
演算法 前 K 個高頻元素
題目 給定乙個非空的整數陣列,返回其 現頻率前 k 高的元素。例如輸入 nums 1,1,1,2,2,3 k 2 輸出 1,2 題解 思路還是比較清晰的 1,先初始化乙個map,通過遍歷,將每個元素的次數統計出來 2,取次數中的前k個元素。關鍵是第二步怎麼取。如果通過排序來取的話,時間複雜度肯定是相...
日常練習13 前K個高頻單詞
1.給一非空的單詞列表,返回前 k 個出現次數最多的單詞。返回的答案應該按單詞出現頻率由高到低排序。如果不同的單詞有相同出現頻率,按字母順序排序。力扣題 思路 1.統計每個單詞出現的次數 wordtocount 2.得到,每個出現次數下,有哪些單詞 3.取出所有的次數 2,1 並對其排序 4.招聘人...