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