Kth Largest Element
Find K-th largest element in an array.
In array [9,3,2,4,8]
, the 3rd largest element is 4
.
In array [1,2,3,4,5]
, the 1st largest element is 5
, 2nd largest element is 4
, 3rd largest element is 3
and etc.
You can swap elements in the array
O(n) time, O(1) extra memory.
class Solution { //param k : description of k //param numbers : array of numbers //return: description of return public int kthLargestElement(int k, ArrayList<Integer> numbers) { // write your code here int L = 0, R = numbers.size() - 1; while (L < R) { int left = L, right = R; int key = numbers.get(left); while (left < right) { while (left<right &&numbers.get(right) < key) --right; numbers.set(left,numbers.get(right)); while (left<right &&numbers.get(left)>= key) ++left; numbers.set(right,numbers.get(left)); } numbers.set(left,key); if (left == k - 1) return numbers.get(k-1); else if (left > k - 1) R = left - 1; else L = left + 1; } return numbers.get(k-1); } };
原文:http://www.cnblogs.com/kittyamin/p/4996498.html