国产探花免费观看_亚洲丰满少妇自慰呻吟_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); }};
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 仙游县| 蓬溪县| 沛县| 山西省| 繁峙县| 郸城县| 离岛区| 通山县| 邮箱| 白城市| 雷州市| 巧家县| 铁岭县| 乌海市| 达拉特旗| 长葛市| 余姚市| 临猗县| 聂荣县| 大渡口区| 泗水县| 句容市| 鞍山市| 姜堰市| 连山| 胶州市| 华坪县| 定结县| 阿合奇县| 柏乡县| 抚顺县| 花莲市| 安平县| 克拉玛依市| 徐汇区| 德昌县| 玉龙| 南昌县| 新乡市| 清镇市| 本溪|