给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 比如:nums = [5,7,7,8,8,10], target=8 返回 [3,4]

    1. <?php
    2. class Solution {
    3. /**
    4. *
    5. * @param Integer[] $nums
    6. * @param Integer $target
    7. * @return Integer[]
    8. */
    9. function searchRange($nums, $target) {
    10. $ret = [-1, -1];
    11. if (!$nums) return $ret;
    12. $left = 0;
    13. $right = count($nums) - 1;
    14. while ($left <= $right) {
    15. $mid = floor(($right - $left) / 2) + $left;
    16. if ($nums[$mid] == $target) {
    17. while ($mid >= $left && $nums[$mid] == $target) {
    18. $mid--;
    19. }
    20. $ret[0] = $mid + 1;
    21. $mid = floor(($right - $left) / 2) + $left;
    22. while ($mid <= $right && $nums[$mid] == $target) {
    23. $mid++;
    24. }
    25. $ret[1] = $mid - 1;
    26. return $ret;
    27. } elseif ($nums[$mid] < $target) {
    28. $left = $mid + 1;
    29. } else {
    30. $right = $mid - 1;
    31. }
    32. }
    33. return $ret;
    34. }
    35. }
    36. $nums = [5,7,7,8,8,10];
    37. $cls = new Solution();
    38. $r = $cls->searchRange($nums, 8);
    39. echo implode(',', $r);