快排中雙向掃瞄法的應用 二元組

2021-10-03 09:20:00 字數 700 閱讀 9202

在乙個有序的陣列中找出兩個元素的和為k的不重複組合

1、暴力破解法。依次從左到右取出元素去乙個乙個相加,看看等不等於k。等於k就輸出兩元素。但是這個的效率非常底,達到了o(n²)級。

注意題目中的有序。所以就有更好的方案了。

2、採用快排的雙向指標掃瞄法。定義左指標,右指標,一開始指向下標0和下標陣列長度-1的位置上,然後把兩指標指向的元素相加。

相加後有三種情況:

1、小於k:如果數值小於k,就說明左指標的數太小了,左指標右移,右指標不動,然後再進行相加依次類推。

2、等於k:直接輸出兩元素,然後左右指標都向中間走一步。(注意題目中的不重複

3、大於k:如果相加後數值大於k,說明右指標的數太大了,右指標左移一步,再進行相加判斷。

終止的條件是兩指標重疊,不然會出現重複組合。

經典排序 第k個元素(快排和雙向掃瞄法)

一 第k個元素 以盡量高的效率求出乙個亂序陣列中按數值順序的第k個元素 亂序陣列 法一 利用快速排序,演算法時間複雜度o nlogn 法二 利用分割槽排序法 雙向掃瞄法 依次與主元比較,比主元大的排在右面不變,比主元小的指標交換位置,得到如下陣列 偽 selectk a,p,r,k partitio...

面試題 快排挖坑法的應用

對乙個陣列按照給定的下標進行排序,僅僅使用兩兩交換的方式,要求不能對陣列進行擴容,盡可能少的額外空間。如 原陣列為a,b,c,d,e,現在給定的新位置為3,0,1,4,2,那麼排序後為d,a,b,e,c,void swapsort int parr,int ppos,int n 這是最近看到的一道面...

20170927 快排應用 陣列中尋找最大的K個數

20170927 快排應用 陣列中尋找最大的k個數 在陣列中尋找最大的 k 個數 例如,輸入 4,5,1,6,2,7,3,8 這8個數字,輸出最大的4個數是 5,6,7,8 在陣列中尋找最大的k個數 例如,輸入 4,5,1,6,2,7,3,8 這8個數字,輸出最大的4個數是 5,6,7,8 incl...