【LeetCode热题100】【二分查找】搜索旋转排序数组

2024-04-17 08:05:15 浏览数 (1)

题目链接: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;
    }
};

0 人点赞