第k大的數

2022-07-02 11:30:16 字數 790 閱讀 8118

給定乙個陣列a和數字k,找出a中第k大的數。

找到乙個樞軸,樞軸右邊還有k-1個數即可。因為每次遍歷只選擇一邊,因而降低了時間複雜度。

public class main 

}return a[k-1];

}

選擇法:

public static int select(int a,int k)

int temp=a[j];

a[j]=a[m];

a[m]=temp;

}return a[k-1];

}

時間複雜度分析:兩種演算法時間複雜度均為o(n*k)。

如果使用函式庫中的優先佇列,則需要更高的空間複雜度。可以在自行構建最大堆,在原陣列自身上操作。另外也沒有必要將整個陣列排好序,堆排序也是依次選出剩餘元素中的最大值,執行k次該操作即可。

因為原陣列下標從0開始,所以根節點下標為0。有:i結點的左孩子2i+1,右孩子2i+2, index結點的父親:(index-1)/2

//堆調整操作,用於建堆

//cur為當前節點位置,n為當前堆中的元素個數-1

public static void adjust(inta,int cur,int n)

return a[n-k+1];

}

時間複雜度分析:複雜度為o(nlogn),由建堆的過程決定。

第k大的數,前k大的數

1 排序後去出前k個,o n log n 如果k2 o nlog k 快排把數分為了兩個部分,所以考慮兩個情況,如果大的部分的個數 k,說明只要繼續在大的部分找就可以了,如果大的部分的個數3 o nlog maxv minv delta 平均為o nlogn 轉化為找第k個,假設最大的數為maxv,...

第K大的數

這道題是我去年聽說的,一次比賽悲劇的,前幾天ac的,大體思路是二分答案,記住在統計的時候,複雜度為n,而不是nlogn,這道題複雜度為 nlog max min include include includeusing namespace std define maxn 51000 int64 a ...

第k大的數

題目 陣列a和陣列b,裡面都有n個整數。陣列c共有n 2個整數,分別是a 0 b 0 a 0 b 1 a 1 b 0 a 1 b 1 a n 1 b n 1 陣列a同陣列b的組合 求陣列c中第k大的數。例如 a 1 2 3,b 2 3 4。a與b組合成的c包括2 3 4 4 6 8 6 9 12共9...