LeetCode热题HOT-100 34、在排序数组中查找元素的第一个和最后一个位置

题目链接

思路:二分法
  • 二分法的精髓在于 判断什么时候来修改left 或者是 right的值
  • 第一次出现,如果nums[mid] = target ,那就让result[0] = mid,同时要修改right,因为此时第一次出现的时候可能在mid的左边
  • 最后一次出现,如果nums[mid] = target ,那就让result[1] = mid,同时要修改left,因为此时最后一次出现的时候可能在mid的右边
class Solution {
    public int[] searchRange(int[] nums, int target) {
        int[] result = new int[]{-1, -1};

        if (0 == nums.length)
            return result;

        int left = 0, right = nums.length - 1;

        //第一个位置
        while (left <= right) {
            int mid = left + ((right - left) >> 1);
            if (nums[mid] == target) {
                result[0] = mid;
                right = mid - 1;
            }
            if (nums[mid] < target)
                left = mid + 1;
            else
                right = mid - 1;
        }

        left = 0;
        right = nums.length - 1;
        while (left <= right) {
            int mid = left + ((right - left) >> 1);
            if (nums[mid] == target) {
                result[1] = mid;
                left = mid + 1;
            }
            if (nums[mid] <= target)
                left = mid + 1;
            else
                right = mid - 1;
        }
        return result;
    }
}

你可能感兴趣的:(算法,算法,leetcode)