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.总结
本题的关键在于二分查找时,确定边界。
该博客介绍了如何解决LeetCode上的一道难题——在一个已排序但未知旋转位置的数组中查找目标值。博主分析了问题并提供了一个使用二分查找算法的解决方案。代码中展示了如何在查找过程中正确调整边界,以适应旋转数组的特性。最终,博主总结了问题的关键在于二分查找时确定正确的边界条件。
859

被折叠的 条评论
为什么被折叠?



