34. Search for a Range

思路:

  首先二分查找找到目标数字,然后左右开始分开扫,注意这个时候的边界处理问题就行了。

一些细节:

  标记首尾时使用-1,array.length来进行标记,即标记数组开始前一个和结束后一个。

class Solution {
    public int[] searchRange(int[] nums, int target) {
        
        if(nums.length == 0)
            return new int[]{-1,-1};
        int low = 0;
        int high = nums.length - 1;
        int find = -1;
        while(low <= high)
        {
            int mid = (low + high) / 2;
            if(target == nums[mid])
            {
                find = mid;
                break;
            }
            else if(target < nums[mid])
                high = mid -1;
            else
                low = mid + 1;
        }
        if(find == -1)
            return new int[]{-1,-1};
        else
        {
            int start = find - 1;
            int end = find + 1;
            while(start > -1 && nums[start] == nums[find])
                start--;
            while(end < nums.length && nums[end] == nums[find])
                end++;
            return new int[]{start+1,end -1};
        }
 
    }
}

 

posted @ 2017-09-07 10:44  深海芷兰  阅读(103)  评论(0)    收藏  举报