這裡使用的是快速排序的思想,快排是每一次確定乙個數的位置,左邊的都比它小,右邊的都比他大。
但是直接用快排會需要更多的時間,這裡相當於對快排進行剪枝,把快排中不需要的步驟去掉
每次確定乙個數的位置之後,如果第k個最大元素在左邊,則只對左邊進行搜尋,否則對右邊搜尋
當然,快排中的其他的優化也可以用在這裡,比如取任意三個數中的中數來定位,或者是在搜尋空間小於n=5時進行遍歷,都可以。
class
solution
if(k < r)
return
find
(nums, k, a, r-1)
;else
if(k > l)
return
find
(nums, k, l+
1, b)
;else
return flag;
}int
findkthlargest
(vector<
int>
& nums,
int k)
};
LeetCode 215 陣列中的第K個最大元素
在未排序的陣列中找到第 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...
LeetCode 215 陣列中的第K個最大元素
在未排序的陣列中找到第 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...
Leetcode215 陣列中的第K個最大元素
在未排序的陣列中找到第 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...