题目链接:33. 搜索旋转排序数组 - 力扣(LeetCode)
同样是要在数组中查找元素,不同的是这次的数组是这样//的,升序数组,但是往前移动了一下,也就是两段升序,456123这样
看了一位天才的思路,把分段升序数组变成单纯的升序数组然后直接二分
因为题目说了元素不超过10000,那么就给第二段升序的部分加上10000,这样就是升序数组了,如果目标元素小于nums[0]说明它在第二段里面,也给它加上10000,不要误会循环加是O(n)的复杂度,只需要在比较的时候相加即可
代码语言:javascript复制class Solution {
public:
int search(vector<int> &nums, int target) {
int left = 0, right = nums.size() - 1;
if (target < nums[0])
target = 10000;
while (left <= right) {
int mid = (left right) / 2;
if (nums[mid] < nums[0])
nums[mid] = 10000;
if (nums[mid] == target)
return mid;
if (target < nums[mid])
right = mid - 1;
else
left = mid 1;
}
return -1;
}
};