leetcode------Search for a Range

标题: Search for a Range
通过率: 27.7%
难度: 中等

Given a sorted array of integers, 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].

For example,
Given [5, 7, 7, 8, 8, 10] and target value 8,
return [3, 4].

本题就是对应target的开始和结束位置,二分法查找。每次比较下开始位置和结束位置,那么开始结束位置的初始值要设定好,

开始位置设定成数组的最大位置。结束位置设定成0,,最后验证下对应位置是不是target,如果不是那就将数组置-1

代码如下:

 1 public class Solution {
 2     public int[] searchRange(int[] A, int target) {
 3         int res []={A.length-1,0};
 4         bs(A,target,0,A.length-1,res);
 5         if(A[res[0]]!=target){
 6             res[0]=-1;
 7             res[1]=-1;
 8         }
 9         return res;
10     }
11     public void bs(int[] A,int target,int start,int end,int [] res){
12         if(start<=end){
13         int mid=(start+end)/2;
14         if(A[mid]==target){
15             if(mid<res[0])res[0]=mid;
16             if(mid>res[1])res[1]=mid;
17         }
18         bs(A,target,start,mid-1,res);
19         bs(A,target,mid+1,end,res);
20         }
21     }
22 }

 

posted @ 2015-03-25 21:16  pku_smile  阅读(160)  评论(0编辑  收藏  举报