美文网首页
Leetcode33:搜索旋转排序数组

Leetcode33:搜索旋转排序数组

作者: VIELAMI | 来源:发表于2020-04-27 15:41 被阅读0次

    【题目描述】

    假设按照升序排序的数组在预先未知的某个点上进行了旋转。

    ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。

    搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。

    你可以假设数组中不存在重复的元素。 

    你的算法时间复杂度必须是 O(log n) 级别。

    【思路】

    1. 整体与二分查找相似

    2. 左边有序:target在左边(判断条件 (nums[left] <= target)&&(target <= nums[mid]))or target在右边(判断条件 上一条的else)

    右边有序:target在右边(判断条件)

    【问题】

    1. 二分查找时注意边界值,这次用的是闭区间

    2. C++ 不可三个比较 要用&&连接

    3. 第一次写的时候判断左边有序还是右边有序的条件错误,

    ```

    if (nums[left] < nums[mid])

    // 错误的用例 {3,1}

    ```

    此时left = mid 会导致进入不了任何一个if条件

    所以要有等号

    【代码】

    ```

    class Solution {

    public:

        int search(vector<int>& nums, int target) {

            if(nums.size()==0) return -1;

                int res = helpSearch(nums, target, 0, nums.size() - 1);

                return res;

        }

        int helpSearch(vector<int>& nums, int target, int left, int right) {

        int mid = (left + right) / 2;

        if (nums[mid] == target) return mid;

            if (left == right) {

            return -1;

        }

        else {

            if (nums[left] <= nums[mid]) {

                //左边有序

                if ((nums[left] <= target)&&(target <= nums[mid])) {

                    //target在左边

                    return helpSearch(nums, target, left, mid);

                }

                else {

                    //target不在左边

                    return helpSearch(nums, target, mid + 1, right);

                }

            }

            if (nums[mid] <= nums[right]) {

                //右边有序

                if ((nums[mid] <= target)&&(target <= nums[right])) {

                    //target在右边

                    return helpSearch(nums, target, mid + 1, right);

                }

                else {

                    //target不在右边

                    return helpSearch(nums, target, left, mid);

                }

            }

        }

        return -1;

    }

    };

    ```

    【result】

    相关文章

      网友评论

          本文标题:Leetcode33:搜索旋转排序数组

          本文链接:https://www.haomeiwen.com/subject/xsaywhtx.html