1. <?php
    2. /**
    3. * https://leetcode-cn.com/problems/kth-largest-element-in-an-array
    4. * @param $nums
    5. * @param $k
    6. * @return mixed
    7. */
    8. /**
    9. * 小顶堆
    10. * @param $nums
    11. * @param $k
    12. * @return mixed
    13. */
    14. function topk($nums,$k){
    15. $h = new SplMinHeap();
    16. foreach ($nums as $num){
    17. $h->insert($num);
    18. if ($h->count() > $k){
    19. $h->extract();
    20. }
    21. }
    22. // 1、topk的值 $h->top();
    23. // $te = [];
    24. // while ($h->valid()) {
    25. // $cur = $h->current();
    26. // $te[] = $cur;
    27. // $h->next();
    28. // }
    29. // 2、$te 小顶堆里面的数据数据打印出来即可 $te
    30. return $h->top();
    31. }
    32. $nums = [2,31,3,4,5];
    33. $k = 3;
    34. //print_r(topk($nums,$k));
    35. function topk2($nums,$k){
    36. $heap = new SplMaxHeap();
    37. foreach ($nums as $num){
    38. $heap->insert($num);
    39. if ($heap->count() > $k){
    40. $heap->extract();
    41. }
    42. }
    43. $te = [];
    44. while ($heap->valid()) {
    45. $cur = $heap->current();
    46. $te[] = $cur;
    47. $heap->next();
    48. }
    49. return $heap->top();
    50. }
    51. //function max($numbers,$k){
    52. // $c = new SplMaxHeap();
    53. // foreach($numbers as $number){
    54. // $c->insert($number);
    55. // if($c->count() > $k){
    56. // $c->extract();
    57. // }
    58. // }
    59. // $res = [];
    60. // if ($c->valid()){
    61. // $res[] = $c->current();
    62. // $c->next();
    63. // }
    64. // return $c->top;
    65. //}
    66. print_r(topk2($nums,$k));

    https://leetcode-cn.com/problems/kth-largest-element-in-an-array