首页 > 考试 > 其他 >

Leetcode 215. Kth Largest Element in an Array

2017-04-25

Leetcode 215 Kth Largest Element in an Array。

Leetcode 215. Kth Largest Element in an Array。

Find thekth 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 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;
    }
}
相关文章
最新文章
热点推荐