Kth Largest Element in an Array

来源:互联网 发布:我的世界js搬运 编辑:程序博客网 时间:2024/06/08 16:19

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.


public class Solution {    public int findKthLargest(int[] nums, int k) {        return findKthLargestHelper(nums, k, 0, nums.length - 1);    }        private int findKthLargestHelper(int[] nums, int k, int begin, int end){        if(begin == end && k == 1)            return nums[begin];        int endPoint = begin+1;        int searchEnd = begin+1;        int pivot = nums[begin];        while(searchEnd <= end){            if(nums[searchEnd] > pivot){                swap(nums, searchEnd, endPoint);                searchEnd++;                endPoint++;            }            else{                searchEnd++;            }        }        endPoint--;        swap(nums,endPoint, begin);        if(endPoint - begin + 1 == k)            return pivot;        else if(endPoint - begin + 1 < k){            return findKthLargestHelper(nums, k - (endPoint - begin + 1), endPoint+1, end);        }        else{            return findKthLargestHelper(nums, k, begin, endPoint - 1);        }    }        private void swap(int[] nums, int index1, int index2){        if(index1 == index2)            return;        int tmp = nums[index1];        nums[index1] = nums[index2];        nums[index2] = tmp;    }}


0 0
原创粉丝点击