面試題四十 陣列中最小的k個數

2022-06-10 03:30:10 字數 971 閱讀 2999

方法一:先排序後尋找前k個數;

方法二:受面試題三十九,尋找超過一半的數的啟發,只把裡面的middle改成k-1就行;

void halfnum( int [ ] array ,int

k)

else

start=index+1;

index=patition(array ,start ,end)

}    

for(int i=0;i)

system.out.println();

}int patition( int a,int be,int

end)

///交換位置,把比主元大的放後面 ,比主元小的放前面

} a[be]=a[r];a[r]=inter;//

/交換位置把主元放進去作為間隔

return

r; }

方法三:適合處理**海量的資料**,建立乙個大小為k的容器,首先填滿,再尋找最大值,比較替換;

void  mink(int array,int

k)          buildheap(a_k);

//建堆      

while(ii++;

}for(int j=0;j)

system.out.println();

}//建堆,二叉樹用陣列表示:根節點下標為n=0;左子樹為2n+1,右子樹為2n+2;求父節點則為(n-1)/2

public

static

void buildheap(int

array)   

//調堆,就是把最大值最為根節點i

//以i為根節點建立大頂堆

public

static

void heapify(int i,int

array)

面試題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個數 中的解法一 基於快排的思想 一次快排 二...