LeetCode 题解(120): Kth Largest Element in an Array
来源:互联网 发布:浙江大学城市学院知乎 编辑:程序博客网 时间:2024/06/05 11:04
题目:
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.
For 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.
用Quick Sort的divide-and-conquer法,或者用Priority Queue (Max Heap) 数据结构,注意Java和Python都是最小堆,需要转换一下。
C++版解法一:
class Solution {public:int findKthLargest(vector<int>& nums, int k) {return nums[returnXth(nums, 0, nums.size() - 1, k)];}int returnXth(vector<int>& nums, int head, int tail, int k) {int start = head;int end = tail;srand((unsigned)time(0));int pivot = (rand() % (end + 1 - start)) + start;swap(nums[start], nums[pivot]);pivot = start;while (start <= end) {while (start <= end && nums[end] >= nums[pivot]) end--;if (start <= end && nums[end] < nums[pivot]) {swap(nums[pivot], nums[end]);pivot = end;end--;}while (start <= end && nums[start] <= nums[pivot]) start++;if (start <= end && nums[start] > nums[pivot]) {swap(nums[start], nums[pivot]);pivot = start;start++;}}if (pivot > nums.size() - k) {pivot = returnXth(nums, head, pivot - 1, k);}else if (pivot < nums.size() - k) {pivot = returnXth(nums, pivot + 1, tail, k);}return pivot;}};
C++版解法二:
class Solution {public: int findKthLargest(vector<int>& nums, int k) { priority_queue<int> a; for(int i = 0; i < nums.size(); i++) { a.push(nums[i]); } for(int i = 0; i < k - 1; i++) a.pop(); return a.top(); }};
Java版解法一:
public class Solution { public int findKthLargest(int[] nums, int k) { return nums[findXth(nums, 0, nums.length-1, k)]; } public int findXth(int[] nums, int head, int tail, int k) { int begin = head; int end = tail; int pivot = begin; int temp; while(begin <= end) { while(begin <= end && nums[end] >= nums[pivot]) end--; if(begin <= end && nums[end] < nums[pivot]) { temp = nums[pivot]; nums[pivot] = nums[end]; nums[end] = temp; pivot = end; end--; } while(begin <= end && nums[begin] <= nums[pivot]) begin++; if(begin <= end && nums[begin] > nums[pivot]) { temp = nums[pivot]; nums[pivot] = nums[begin]; nums[begin] = temp; pivot = begin; begin++; } } if(pivot > nums.length - k) pivot = findXth(nums, head, pivot-1, k); else if(pivot < nums.length - k) pivot = findXth(nums, pivot+1, tail, k); return pivot; }}
Java版解法二:
import java.util.PriorityQueue;public class Solution { public int findKthLargest(int[] nums, int k) { PriorityQueue<Integer> heap = new PriorityQueue<>(); for(int i = 0; i < nums.length; i++) heap.add(nums[i]); for(int i = 0; i < nums.length - k; i++) heap.poll(); return heap.peek(); }}
Python版解法一:
class Solution: # @param {integer[]} nums # @param {integer} k # @return {integer} def findKthLargest(self, nums, k): return nums[self.findXth(nums, 0, len(nums)-1, k)] def findXth(self, nums, head, tail, k): begin = head end = tail pivot = head while begin <= end: while begin <= end and nums[end] >= nums[pivot]: end -= 1 if begin <= end and nums[end] < nums[pivot]: nums[end], nums[pivot] = nums[pivot], nums[end] pivot = end end -= 1 while begin <= end and nums[begin] <= nums[pivot]: begin += 1 if begin <= end and nums[begin] > nums[pivot]: nums[begin], nums[pivot] = nums[pivot], nums[begin] pivot = begin begin += 1 if pivot > len(nums) - k: pivot = self.findXth(nums, head, pivot-1, k) elif pivot < len(nums) - k: pivot = self.findXth(nums, pivot+1, tail, k) return pivot
Python版解法二:
import heapqclass Solution: # @param {integer[]} nums # @param {integer} k # @return {integer} def findKthLargest(self, nums, k): data = [] for i in nums: heapq.heappush(data, -i) for i in range(k-1): heapq.heappop(data) return -heapq.heappop(data)
0 0
- LeetCode 题解(120): Kth Largest Element in an Array
- LeetCode题解——Kth Largest Element in an Array
- LeetCode题解–215. Kth Largest Element in an Array
- LeetCode题解系列--215. Kth Largest Element in an Array
- 题解:Kth Largest Element in an Array
- Leetcode Kth Largest Element in an Array
- Leetcode: Kth Largest Element in an Array
- LeetCode Kth Largest Element in an Array
- [LeetCode] Kth Largest Element in an Array
- [leetcode] Kth Largest Element in an Array
- leetcode--Kth Largest Element in an Array
- #leetcode#Kth Largest Element in an Array
- LeetCode Kth Largest Element in an Array
- 【Leetcode】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]Kth Largest Element in an Array
- 欢迎使用CSDN-markdown编辑器
- 用于主题检测的临时日志(d092a6e5-a8df-48c7-a5c6-be17d22e1b28 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)
- Hello World!
- Xcode中使用Snippets
- java课堂练习之可变参数与卫条件
- LeetCode 题解(120): Kth Largest Element in an Array
- STC DATAFLASH 模拟EEPROM
- java的类模板,对象,实例内存地址分析
- 手斧Linux – 从LFS到Funtoo (77)
- 手斧Linux – 从LFS到Funtoo (78)
- 手斧Linux – 从LFS到Funtoo (79)
- 我的大创之旅
- 手斧Linux – 从LFS到Funtoo (80)
- 手斧Linux – 从LFS到Funtoo (81)