Find the kth largest element in an unsorted array. Note that it was the kth largest element in the sorted order and not the kth distinct element.
For example,
Given [3,2,1,5,6,4]
and k = 2, return 5.
Note:
You may assume k are always valid, 1≤k≤array ' s length.
Look for the number of the K-large in an array.
1, the establishment of an array of size k, each maintenance of this array, is a violent practice.
Public classSolution { Public intFindkthlargest (int[] Nums,intk) {intLen =nums.length; int[] result =New int[K]; for(inti = 0; I < K; i++) {Result[i]=Nums[i]; } for(inti = k; i < Len; i++){ intMin = result[0]; intpos = 0; for(intj = 1; J < K; J + +){ if(Min >Result[j]) {min=Result[j]; POS=J; } } if(Nums[i] >min) {Result[pos]=Nums[i]; } } intAns = result[0]; for(inti = 1; I < K; i++) {System.out.println (Result[i]+ "" + result[0]); Ans=math.min (ans, result[i]); } returnans; }}
2, the use of fast row
Public classSolution { Public intFindkthlargest (int[] Nums,intk) {returnQuickSort (Nums, K, 0, Nums.length-1); } Public intQuickSort (int[] Nums,intKintStartintend) { intleft = start, right =end; intnum =Nums[start]; for(inti = end; i > start; i--){ if(Nums[i] >=num) {Swap (nums, end--, i); }} swap (Nums, end, start); if(k = = Nums.length-end) { returnNums[end]; } Else if(k > Nums.length-end) { returnQuickSort (Nums, K, left, end-1); } Else { returnQuickSort (Nums, K, end + 1, right); } } Public voidSwapint[] Nums,intAintb) { intnum =Nums[a]; Nums[a]=Nums[b]; NUMS[B]=num; }}
3, discuss in the fast row. More speed
Public classSolution { Public intFindkthlargest (int[] Nums,intk) {returnSelect (Nums, k-1); } //Quick Select Private intSelectint[] Nums,intk) {intleft = 0, right = nums.length-1; while(true) { if(left = =Right )returnNums[left]; intPivotindex =medianOf3 (Nums, left, right); Pivotindex=partition (Nums, left, right, Pivotindex); if(Pivotindex = =k)returnNums[k]; Else if(Pivotindex >k) right= PivotIndex-1; Else Left= Pivotindex+1; } } //Use median-of-three strategy to choose Pivot Private intMEDIANOF3 (int[] Nums,intLeftintRight ) { intMid = left + (right-left)/2; if(Nums[right] >Nums[left]) swap (nums, left, right); if(Nums[right] >Nums[mid]) swap (Nums, right, mid); if(Nums[mid] >Nums[left]) swap (nums,left, mid); returnmid; } Private intPartitionint[] Nums,intLeftintRightintPivotindex) { intPivotvalue =Nums[pivotindex]; Swap (Nums, Pivotindex, right); intindex =Left ; for(inti = left; I < right; ++i) {if(Nums[i] >pivotvalue) {Swap (nums, index, i); ++index; }} swap (Nums, right, index); returnindex; } Private voidSwapint[] Nums,intAintb) {inttemp =Nums[a]; Nums[a]=Nums[b]; NUMS[B]=temp; }}
Leetcode 215. Kth largest Element in an Array looking for the K-large number----------Java