November 24, 2019

34. Find First and Last Position of Element in Sorted Array

34. Find First and Last Position of Element in Sorted Array

Binary Search. Time = O(logn), space = O(1);

先二分搜索最左位置,再二分搜索最右位置。和普通二分搜索相比,要提前一步停下来。
找 First/Last element 的 termination condition: 当 left 和 right 相邻的时候,跳出 while 循环,再判断 left 和 right 究竟哪个是最终答案。

class Solution {
    public int[] searchRange(int[] nums, int target) {

        int[] res = {-1, -1};
        if (nums == null || nums.length == 0) {
            return res;
        }        
        int left = 0;
        int right = nums.length - 1;
        while (left < right - 1) { // 提前一步停下来
            int mid = left + (right - left)/2;
            if (nums[mid] >= target) {
                right = mid;  // when nums[mid] == target, do not stop, keep checking to left.
            } else {
                left = mid;
            }
        }
        if (nums[left] == target) {
            res[0] = left;
        } else if (nums[right] == target) {
            res[0] = right;
        } else {
            return res;
        }
        right = nums.length - 1;
        while (left < right - 1) {
            int mid = left + (right - left)/2;
            if (nums[mid] <= target) {
                left = mid;  // when nums[mid] == target, do not stop, keep checking to right.
            } else {
                right = mid;
            } 
        }
        if (nums[right] == target) {
            res[1] = right;
        } else if (nums[left] == target) {
            res[1] = left;
        } else {
            return res;
        }
        return res;
    }
}
comments powered by Disqus