1.问题描述
LeetCode:
Suppose a sorted array is rotated at some pivot unknown to you beforehand.(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
2.问题分析
使用二分查找。
3.代码
#include <iostream>
using namespace std;
class Solution
{
public:
int search(int A[], int n, int target)
{
int first = 0, last = n;
while(first != last)
{
int mid = first + (last - first) /2;
if(A[mid] == target)
return mid;
if(A[first] <= A[mid])
{
if(A[first] <= target && target < A[mid])
last = mid;
else
first = mid+1;
}
else
{
if(A[mid] < target && target <= A[last-1])
first = mid+1;
else
last = mid;
}
}
return -1;
}
};
//测试
int main(int argc, char* argv[])
{
Solution A;
int b[7] = {4, 5, 6, 7, 0, 1, 2};
int index = A.search(b,7,0);
cout << index << endl;
system("pause");
return 0;
}
4.总结
本题的关键在于二分查找时,确定边界。