Leetcode 215. Kth Largest Element in an Array

来源:互联网 发布:windows清理垃圾命令 编辑:程序博客网 时间:2024/06/12 23:51

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 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;    }}


0 0