LeetCode Devide & Conquer problem || Kth Largest Element in an Array
2017-03-05 01:20
453 查看
题目描述
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.example:
Given [3,2,1,5,6,4] and k = 2, return 5.
Note:
You may assume k is always valid, 1 ≤ k ≤ array’s length.
Difficulty:
medium
解题思路
如果不考虑题目tag,这道题非常简单,直接用sort函数将序列排序,返回第K大的元素即可,easy.class Solution { public: int findKthLargest(vector<int>& nums, int k) { sort(nums.begin(), nums.end()); int kmax = nums[nums.size() - k]; return kmax; } };
考虑题目Tag中Divide and Conquer的要求,则需要自己写一个分治算法对序列进行排序了。排序算法中最经典的分治算法,就是快排(Quick Sort)了。
快排的基本思想是任取待排序对象序列中的某个对象(例如第一个对象)作为枢轴(pivot),按照该对象的关键字大小,将整个对象划分为左右两个子序列:
左侧子序列中所有对象的关键字都小于或等于枢轴对象的关键字;
右侧子序列中所有对象的关键字都大于枢轴对象的关键字;
枢轴对象则排在这两个子序列中间(这也是该对象最终应安放的位置)。
然后分别对这两个子序列重复实施上述方法,直到所有对象都排在相应的位置上为止。
class Solution { public: int partition(vector<int>& list, int low, int high){ int pivot = list[low]; while(low < high){ while(low < high && list[high] >= pivot) high--; list[low] = list[high]; while(low < high && list[low] <= pivot) low++; list[high] = list[low]; } list[low] = pivot; return low; } void quickSort(vector<int> &list, int low, int high){ if(low < high){ int pivot = partition(list, low, high); quickSort(list, low, pivot - 1); quickSort(list, pivot + 1, high); } } int findKthLargest(vector<int>& nums, int k) { quickSort(nums, 0, nums.size() - 1); int kmax = nums[nums.size() - k]; return kmax; } };
然而题目还给了另一个提示Tag:Heap,先占一个Tag,以后用堆排序完成排序后再来补充完整(●ˇ∀ˇ●)~
相关文章推荐
- leetcode_c++:Divide and Conquer:Kth Largest Element in an Array(215)
- [week 16][Leetcode][Divide and Conquer] Kth Largest Element in an Array
- LeetCode215:Kth Largest Element in an Array
- LeetCode Kth Largest Element in an Array
- LeetCode 215:Kth Largest Element in an Array
- Kth Largest Element in an Array - LeetCode 215
- Java for LeetCode 215 Kth Largest Element in an Array
- LeetCode——Kth Largest Element in an Array
- leetcode 215: Kth Largest Element in an Array
- [LeetCode] Kth Largest Element in an Array 数组中第k大的数字
- [LeetCode] Kth Largest Element in an Array
- leetcode-215 Kth Largest Element in an Array
- [LeetCode] Kth Largest Element in an Array
- [Leetcode 215, Medium] Kth Largest Element in an Array
- [LeetCode]Kth Largest Element in an Array
- Kth Largest Element in an Array - LeetCode
- Leetcode: Kth Largest Element in an Array
- Leetcode[215]-Kth Largest Element in an Array
- [leetcode] Kth Largest Element in an Array
- 【leetcode】Kth Largest Element in an Array