Leetcode - Search for a Range

My code:

public class Solution {
    public int[] searchRange(int[] nums, int target) {
        if (nums == null || nums.length == 0)
            return null;
        int[] ret = new int[2];
        int begin = 0;
        int end = nums.length - 1;
        while (begin <= end) {
            int mid = begin + (end - begin) / 2;
            if (nums[mid] > target)
                end = mid - 1;
            else if (nums[mid] < target)
                begin = mid + 1;
            else {
                int pre = mid;
                while (pre >= 0 && nums[pre] == nums[mid])
                    pre--;
                int post = mid;
                while (post < nums.length && nums[post] == nums[mid])
                    post++;
                ret[0] = pre + 1;
                ret[1] = post - 1;
                return ret;
            }
        }
        ret[0] = -1;
        ret[1] = -1;
        return ret;
    }
}

这道题目还是挺简单的。
就是一个简单的binary search。

**
总结: binary search
**

Anyway, Good luck, Richardo!

My code:

public class Solution {
    public int[] searchRange(int[] nums, int target) {
        int[] ret = new int[2];
        ret[0] = -1;
        ret[1] = -1;
        if (nums == null || nums.length == 0)
            return ret;
        int begin = 0;
        int end = nums.length - 1;
        while (begin <= end) {
            int middle = begin + (end - begin) / 2;
            if (nums[middle] > target) {
                int i = middle - 1;
                while (i >= 0 && nums[i] == nums[i + 1])
                    i--;
                if (i < 0)
                    break;
                else
                    end = i;
            }
            else if (nums[middle] < target) {
                int i = middle + 1;
                while (i <= nums.length - 1 && nums[i] == nums[i - 1])
                    i++;
                if (i > nums.length - 1)
                    break;
                else
                    begin = i;
            }
            else {
                int left = middle - 1;
                while (left >= 0 && nums[left] == nums[left + 1])
                    left--;
                ret[0] = left + 1;
                int right = middle + 1;
                while (right <= nums.length - 1 && nums[right] == nums[right - 1])
                    right++;
                ret[1] = right - 1;
                return ret;
            }
        }
        ret[0] = -1;
        ret[0] = -1;
        return ret;
    }
}

一道简单的binary search题目。和以前的代码相比,我这次复杂了一些。为什么呢。因为在 > <的情况下,我仍然采用了滑动,所以速度应该更快些。

Anyway, Good luck, Richardo!

你可能感兴趣的:(Leetcode - Search for a Range)