Medium 215题 Kth Largest Element in an Array

来源:互联网 发布:java程序员个人简历 编辑:程序博客网 时间:2024/06/05 13:13

Question:

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.

Solution:

Here is a easy solution, but it seems we are not expected to do so?

public class Solution {    public int findKthLargest(int[] nums, int k) {        int n=nums.length;        int kplus=n-k+1; //the kth smallest        Arrays.sort(nums);        return nums[kplus-1];    }}


We use quick sort

/*public class Solution {    public int findKthLargest(int[] nums, int k) {        int n=nums.length;        int kplus=n-k+1; //the kth smallest        Arrays.sort(nums);        return nums[kplus-1];        int n=nums.length;    int kplus=n-k+1;            }}*/public class Solution {public int findKthLargest(int[] a, int k) {    int n = a.length;    int p = quickSelect(a, 0, n - 1, n - k + 1);    return a[p];  }    // return the index of the kth smallest number  int quickSelect(int[] a, int lo, int hi, int k) {    // use quick sort's idea    // put nums that are <= pivot to the left    // put nums that are  > pivot to the right    int i = lo, j = hi, pivot = a[hi];    while(i<j)    {        if(a[i]>pivot)        {            j--;            swap(a,i,j);        }        else        {            i++;        }            }    swap(a,i,hi);      // count the nums that are <= pivot from lo    int m=i-lo+1;        if(m==k)    return i;    //continue search the right part    else if(m<k) return quickSelect(a,i+1,hi,k-m);    else  return quickSelect(a,lo,i-1,k);      }    void swap(int[] a, int i, int j) {    int tmp = a[i];    a[i] = a[j];    a[j] = tmp;  }}






0 0