在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

    示例 1:

    输入: [3,2,1,5,6,4] 和 k = 2
    输出: 5
    示例 2:

    输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
    输出: 4

    1. <?php
    2. function Quikc($nums){
    3. if(count($nums) < 2){
    4. return $nums;
    5. }
    6. $midVal = $nums[0];
    7. $left = $right = $mid = [];
    8. foreach($nums as $item){
    9. if($item == $midVal){
    10. $mid[] = $item;
    11. }elseif($item < $midVal){
    12. $left[] = $item;
    13. }else{
    14. $right[] = $item;
    15. }
    16. }
    17. $left = $this->Quikc($left);
    18. $right = $this->Quikc($right);
    19. return array_merge($left,$mid,$right);
    20. }
    21. /**
    22. * @param Integer[] $nums
    23. * @param Integer $k
    24. * @return Integer
    25. */
    26. function findKthLargest($nums, $k) {
    27. $res = $this->Quikc($nums);
    28. return $res[count($nums)-$k];
    29. }
    30. function findKthLargest2($nums, $k)
    31. {
    32. $n = count($nums);
    33. $heap = new SplMinHeap();
    34. for ($i = 0; $i < $n; ++$i) {
    35. if ($heap->count() < $k) {
    36. $heap->insert($nums[$i]);
    37. } elseif ($heap->top() < $nums[$i]) {
    38. $heap->extract();
    39. $heap->insert($nums[$i]);
    40. }
    41. }
    42. return $heap->top();
    43. }

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。