Search for a Range

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].

 

思路:二分查找,然后再往前后找即可。

 1 class Solution {
 2 public:
 3     vector<int> searchRange(int A[], int n, int target) {
 4         int i=biSearch(A,0,n,target);
 5         vector<int> res(2,-1);
 6         if(i==-1)return res;
 7         int temp=i;
 8         while(temp<n)
 9         {
10             if(A[temp]!=target)break;
11             else temp++;
12         }
13         res[1]=temp-1;
14         temp=i;
15         while(temp>=0)
16         {
17             if(A[temp]!=target)break;
18             else temp--;
19         }
20         res[0]=temp+1;
21         return res;
22     }
23     int biSearch(int A[], int s, int e, int target)
24     {
25      if(s>e)return -1;
26      if(s==e)return A[s]==target?s:-1;
27      int mid=(s+e)/2;
28      if(A[mid]>target) return biSearch(A,s,mid,target);
29      else if(A[mid]<target)return biSearch(A,mid+1,e,target);
30      else return mid;
31      
32     }
33     
34 };

 

posted @ 2014-07-04 14:03  Hicandyman  阅读(210)  评论(0)    收藏  举报