国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Leetcode 215 - Kth Largest Element in an Array(二分)

2019-11-08 20:03:36
字體:
來源:轉載
供稿:網友

題意

求一個未排序數組的第k大。

思路

算法1

O(nlogn)的復雜度。

先排序,然后直接返回第k大即可。

算法2

期望時間為O(n),最壞時間為O(n2)的算法。

其基本思想就是基于快排。

首先,我們選擇一個觀察哨x,將≥x的元素放在x左邊,小于x的元素放在x的右邊。

然后,如果x此時的位置pos+1==k,說明x即為我們要求的元素。

否則, 如果pos+1>k,說明x過小,那么要求的元素應該在[l, pos - 1]之間。

否則, 要求的元素在[pos + 1, r]之間。

在算導第三版的P120-P122有對該算法時間復雜度的證明。

代碼

class Solution {public: //reverse order int partition(vector<int>& a, int l, int r) { int x = a[r], i = l - 1; for (int j = l; j < r; j++) { if (a[j] >= x) swap(a[++i], a[j]); } swap(a[++i], a[r]); return i; } int KthNum(vector<int>& a, int l, int r, int k) { while (l <= r) { int m = partition(a, l, r); if (m + 1 == k) return a[m]; if (m < k) l = m + 1; else r = m - 1; } return 0; } int findKthLargest(vector<int>& nums, int k) { int n = nums.size(); return KthNum(nums, 0, n - 1, k); }};
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 岳阳市| 秭归县| 沙洋县| 清苑县| 五家渠市| 保定市| 武陟县| 吉木乃县| 古交市| 穆棱市| 图木舒克市| 大足县| 阳泉市| 海阳市| 肇州县| 沐川县| 凤城市| 南郑县| 正蓝旗| 衡阳市| 通许县| 平昌县| 英吉沙县| 塔城市| 浦城县| 灵宝市| 娄底市| 襄城县| 汾阳市| 河西区| 金川县| 吕梁市| 汕尾市| 贵定县| 卫辉市| 弥勒县| 金寨县| 东阿县| 津市市| 齐河县| 丹江口市|