day001 215 陣列中的第K個最大元素

2022-05-09 03:54:08 字數 1067 閱讀 5293

difficulty:中等

在未排序的陣列中找到第k個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。

示例 1:

輸入: [3,2,1,5,6,4] 和 k = 2

輸出: 5

示例 2:

輸入: [3,2,3,1,2,4,5,5,6] 和 k = 4

輸出: 4

說明:

你可以假設 k 總是有效的,且 1 ≤ k ≤ 陣列的長度。

solution 1

bool cmp(int a,int b)

class solution

};

思路
簡單粗暴,從大到小排序後直接選擇第k大的數就可以,時間複雜度o(nlgn),基本上時間花在排序上。

solution 2
​class solution 

private:

inline int randompartition(vector& a, int l, int r)

int topk(vector& nums, int left, int right, int k)

else if (pos > k)

else

} int partition(vector& nums, int left, int right)

}swap(nums[right], nums[++tail]);

return tail;

}};

思路
快排的分割槽操作,如果每次規模為 n 的問題我們都劃分成 1 和 n - 1,每次遞迴的時候又向 n - 1的集合中遞迴,這種情況是最壞的,時間代價是 o(n2)。所以引入隨機化來加速這個過程,它的時間代價的期望在概率上看來是 o(n)。

陣列中的第k小數

描述 以盡量高效率求出亂序中的k小數 輸入 第一行 陣列長度 第二行 陣列元素 空格隔開 第三性 第幾小的數 輸出 第k小的數 樣例輸入 5 6 1 2 9 3 8 2樣例輸出 解題思路利用快速排序找到主元的位置,判斷主元是第幾小的 主元位置大了剪掉右邊的 主元位置小了剪掉左邊的 假設要找第三小的數...

陣列中的第K大元素

第k大元素o n 解法,利用快排 剪枝,直接看 吧 include int k 7 第k大,k 0 int sort int array,int low,int high array low key return low void quicksort int array,int low,int hi...

陣列中第K小的數字

題目描述 給定兩個整型陣列a和b。我們將a和b中的元素兩兩相加可以得到陣列c。譬如a為 1,2 b為 3,4 那麼由a和b中的元素兩兩相加得到的陣列c為 4,5,5,6 現在給你陣列a和b,求由a和b兩兩相加得到的陣列c中,第k小的數字。輸入 輸入可能包含多個測試案例。對於每個測試案例,輸入的第一行...