面試題 最小的k個數(三種解法)

2021-10-07 20:31:56 字數 1166 閱讀 2355

}時間複雜度:o(n*logn)

// 快速選擇法

class

solution

public

intpartition

(int

nums,

int left,

int right,

int pivot_index)

}// 迴圈結束後,將樞紐元素交換到合適的位置上

int tmp = nums[sorted_index]

; nums[sorted_index]

= nums[right]

; nums[right]

= tmp;

return sorted_index;

}public

intquick_select

(int

nums,

int left,

int right,

int target)

}

時間複雜度:o(n)

但是函式 partition會改變陣列中數字的順序。

class

solution})

;for

(int n:arr)

}// 將堆中的元素存入乙個int陣列並返回

int[

] res =

newint

[heap.

size()

];int i =0;

for(

int num:heap)

return res;

}}

時間複雜度:o(n*logk),由於大頂堆需要實時維護前 k 小值,所以插入刪除都是 o(logk) 的時間複雜度,最壞情況下陣列裡 n 個數都會插入,所以一共需要 o(nlogk) 的時間複雜度。

空間複雜度:o(k),大頂堆最多 k個元素。

面試題40 最小k個數

題目 輸入n個整數,找出其中最小的k個數 思路 1 如果輸入的陣列可以改變,則基於第k個數來調整,是第k個數左邊的數都小於第k個數,右邊的數都大於第k個數 時間複雜度o n 思路1 void printkminnumberbymethod1 int arr,int length,int k int ...

面試題之最小K個數

最小 最大k個數 是面試容易提及的其中乙個問題,此處用快排思路解決。思路 因為當選取的樞紐元等於k時,樞紐元左邊的序列元素必定小於k,右邊的序列元素必定大於k。儘管序列內部是無序的,但此時結果已符合題意。為避免產生多餘的排序工作,我們只需要在遞迴的時候分歧選擇最接近k的方向即可,一旦等於k就停止遞迴...

面試題 17 14 最小K個數

leetcode 面試題 17.14.最小k個數 easy 題 但是這道題是想考什麼 明顯很多種解法 排序暴力 topk 問題 大頂堆 使用 bfprt 在o n 內求解前k小的數 最壞時間複雜度 o n o n o n 劍指 offer 40.最小的k個數 中的解法一 基於快排的思想 一次快排 二...