Leetcode 215. Kth Largest Element in an Array
2017-04-24 07:07
316 查看
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
Note:
You may assume k is always valid, 1 ≤ k ≤ array's length.
思路是运用quick selection 和 quick sort 很像。
1、把数组里的一个数设为pivot, 把小于pivot的数放在左边,把大于pivot的数放在右边
2、比较k和left的大小,如果k大的话,就查找右半边,如果k小的话,就查找左半边
public class Solution {
public int findKthLargest(int[] nums, int k) {
return findKthLargest(nums, 0, nums.length - 1, nums.length - k);
}
public int findKthLargest(int[] nums, int start, int end, int k) {
int pivot = nums[end];
int left = start;
for (int i = start; i < end; i++) {
if (nums[i] <= pivot) swap(nums, left++, i);
}
swap(nums,left,end);
if (left == k) return nums[left];
else if (left < k) return findKthLargest(nums, left + 1, end, k);
else return findKthLargest(nums, start, left - 1, k);
}
public void swap(int[] a, int i, int j) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
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 selection 和 quick sort 很像。
1、把数组里的一个数设为pivot, 把小于pivot的数放在左边,把大于pivot的数放在右边
2、比较k和left的大小,如果k大的话,就查找右半边,如果k小的话,就查找左半边
public class Solution {
public int findKthLargest(int[] nums, int k) {
return findKthLargest(nums, 0, nums.length - 1, nums.length - k);
}
public int findKthLargest(int[] nums, int start, int end, int k) {
int pivot = nums[end];
int left = start;
for (int i = start; i < end; i++) {
if (nums[i] <= pivot) swap(nums, left++, i);
}
swap(nums,left,end);
if (left == k) return nums[left];
else if (left < k) return findKthLargest(nums, left + 1, end, k);
else return findKthLargest(nums, start, left - 1, k);
}
public void swap(int[] a, int i, int j) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
相关文章推荐
- LeetCode 215. Kth Largest Element in an Array(第K大元素)
- [leetcode] 215. Kth Largest Element in an Array
- leetcode 215. Kth Largest Element in an Array
- [leetcode] 215. Kth Largest Element in an Array
- leetcode刷题之旅——215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array LeetCode
- leetcode 215. Kth Largest Element in an Array
- leetcode 215. Kth Largest Element in an Array | Java最短代码实现
- Leetcode 215. Kth Largest Element in an Array[medium]
- 【leetcode】215. Kth Largest Element in an Array
- [leetcode]215. Kth Largest Element in an Array
- Leetcode 215. Kth Largest Element in an Array
- 【LeetCode】215. Kth Largest Element in an Array,基于Java和C++的解法
- LeetCode 215. Kth Largest Element in an Array
- [LeetCode]215. Kth Largest Element in an Array
- leetcode 215. Kth Largest Element in an Array
- [leetcode] 215. Kth Largest Element in an Array 解题报告
- LeetCode215. Kth Largest Element in an Array
- Leetcode 215. Kth Largest Element in an Array
- 【LeetCode】215. Kth Largest Element in an Array (Medium)