这里比较重要的是,不要一上来就判断mid 和 target有没有关系。
因为数组是无序的,这样的判断毫无结论,只会搞的更复杂。
应该先想办法判断出哪一侧是有序的。
class Solution {
public:
int search(vector<int>& a, int target) {
int low, high, mid;
low = 0, high = a.size();
while(low < high)
{
mid = low + (high - low)/2;
if(a[mid] == target) return mid;
if(a[low] < a[mid]) //left is in order
{
if(target >= a[low] && target < a[mid]) //target in left side
{
high = mid;
}
else
{
low = mid + 1;
}
}
else // right in order
{
if(target > a[mid] && target < a[low])
{
low = mid + 1;
}
else
{
high = mid;
}
}
}
return -1;
}
};