7.1—查找—Sear for a Range

来源:互联网 发布:儿童初学画画软件 编辑:程序博客网 时间:2024/06/04 01:24
描述
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>using namespace std;int SearchforRange1(int a[],int n,int k){int res = -1;if (n <= 0)return res;int begin = 0; int end = n - 1;while (begin <= end){int mid = (begin + end) / 2;if (a[mid] < k){begin = mid + 1;}else if (a[mid] > k){end = mid - 1;}else{if ((mid-1)<0||a[mid - 1] < k){res = mid;return res;}else{end = mid - 1;}}}return res;}int SearchforRange2(int a[], int n, int k){int res = -1;if (n <= 0)return res;int begin = 0; int end = n - 1;while (begin <= end){int mid = (begin + end) / 2;if (a[mid] < k){begin = mid + 1;}else if (a[mid] > k){end = mid - 1;}else{if ((mid+1)>=n||a[mid + 1] > k){res = mid;return res;}else{begin = mid + 1;}}}return res;}int main(){const int n = 10;int a[n] = { 1, 3, 4, 5, 5, 5, 5, 7, 8, 10 };int k = 1;int begin = SearchforRange1(a, n, k);int end = SearchforRange2(a, n, k);cout << begin << " " << end<< endl;}


阅读全文
0 0
原创粉丝点击