Skip to content

Latest commit

 

History

History
65 lines (52 loc) · 1.74 KB

File metadata and controls

65 lines (52 loc) · 1.74 KB

Difficulty: Medium

Given an array of integers nums sorted in ascending order, find the starting and ending position of a given target value.

Your algorithm's runtime complexity must be in the order of O(log n).

If the target is not found in the array, return [-1, -1].

Example 1:

Input: nums = [5,7,7,8,8,10], target = 8
Output: [3,4]```

**Example 2:**

Input: nums = [5,7,7,8,8,10], target = 6 Output: [-1,-1]```

Solution

Language: Java

class Solution {
    public int[] searchRange(int[] nums, int target) {
        int[] result = new int[]{-1, -1};
        if (nums.length == 0) {
            return result;
        }
        int i = 0;
        int j = nums.length - 1;
        while (i < j) {
            int mid = (i + j) / 2;
            if (nums[mid] < target) {
                i = mid + 1;
            } else {
                j = mid;
            }
        }
        if (nums[i] != target)
            return result;
        result[0] = i;
        j = nums.length - 1;
        while (i < j) {
            int mid = (i + j) / 2 + 1; // 中位数偏右,避免上面的判断无法跳出循环
            if (nums[mid] > target) {
                j = mid - 1;
            } else {
                i = mid;
            }
        }
        if (nums[j] == target) {
            result[1] = j;
        }
        return result;
    }
}