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]
.
#include<iostream> #include<vector> using namespace std; vector<int> searchRange(int A[], int n, int target) { int first = 0; int last = n - 1; vector<int>result(2, -1); while (first<=last) { int mid = (first + last) / 2; if (A[mid] == target) { result[0] = mid; result[1] = mid; while (result[0]-1 >= first&&A[result[0]-1] == target)//当一位是重复位时才对范围跟新 --result[0]; while (result[1]+1 <= last&&A[result[1]+1] == target) ++result[1]; return result; } else if (A[mid] < target) first = mid + 1; else last = mid - 1; } return result; }
原文:http://blog.csdn.net/li_chihang/article/details/44428087