class Solution {
public:
int search(int A[], int n, int target) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int left = 0;
int right = n - 1;
int mid = -1;
while (left <= right)
{
//A[left..right]整体循环有序
mid = (left + right) >> 1;
if (A[mid] > target)
{
if (A[mid] >= A[left]) //枢纽点在右边,左半部分有序,右半部分循环有序
{
if (A[left] <= target) //若左边界不大于目标,则目标若存在必在左半部分中
{
right = mid - 1;
}
else //左边界大于目标,则目标若存在必在右半部分中
{
left = mid + 1;
}
} //枢纽点在左边,右半部分有序,左半部分循环有序, 因此右半部分不可能包含目标
else
{
right = mid - 1;
}
}
else if (A[mid] < target)
{
//枢纽点在右边,左半部分有序,右半部分循环有序,目标只能出现在右半部分
if (A[mid] >= A[left])
{
left = mid + 1;
}
else //枢纽点在左边,右半部分有序,左半部分循环有序
{
if (A[left] > target) //左边界大于目标,则目标若存在必在右半部分中
{
left = mid + 1;
}
else //左边界小于等于目标,则目标若存在必在左半部分中
{
right = mid - 1;
}
}
}
else //找到目标
{
break;
}
}
return left <= right ? mid : -1;
}
};
LeetCode-Search in Rotated Sorted Array
最新推荐文章于 2024-09-25 10:36:42 发布