Search for a Range

来源:互联网 发布:有了域名怎么建网站 编辑:程序博客网 时间:2024/06/05 06:20

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)主要是迭代的利用二分查找


#include <iostream>#include <vector>using namespace std;int searchPos(int A[],int begin,int end,int target){int pos = -1;while(begin <= end){int mid = (begin+end)/2;if(A[mid] == target){pos = mid;break;}if(A[mid] < target){begin = mid+1;}if(A[mid] > target){end = mid -1;}}return pos;}vector<int> searchRange(int A[], int n, int target) {vector<int> result;int begin = 0;int end = n-1;int pos = searchPos(A,begin,end,target);if(pos == -1){result.push_back( -1);result.push_back( -1);return result;}else{int q = pos;int p = q;while( (p = searchPos(A,0,q-1,target))!=-1){q = p;}result.push_back(q);q = pos;p = q;while( (p = searchPos(A,q+1,n-1,target))!=-1){q = p;}result.push_back(q);return result;}}int main(void){int A[] = {5, 7, 7, 8, 8, 10};vector<int> result = searchRange(A,sizeof(A)/sizeof(int), 8);cout <<"[" << result[0] <<"," << result[1] <<"]" << endl;system("pause");return 0;}


0 0
原创粉丝点击