码迷,mamicode.com
首页 > 其他好文 > 详细

33.Search in Rotated Sorted Array

时间:2020-05-20 15:55:12      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:span   vector   while   lse   因此   使用   复杂   div   思路   

给定一个已排好序的数组,将数组循环移动后,给定一个目标整数,求目标整数是否在数组中,若在,返回下标,否则,返回 -1 ,必须使用 O(log?n)时间复杂度。
Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4

思路:
题目要求O(log?n)的时间复杂度,所以必须使用二分查找。因为数组被循环移动了,所以数组相当于分为2部分,设1部分为,里面元素都比较大的,2部分为整体元素都小的,每一部分内部都是升序排列的。题目难度在于,找到 mid所处于哪一部分,因此,在使用二分查找的时候,先确定mid在哪一部分,然后再使用二分查找即可。

int search(vector<int>& nums, int target) {
    int l = 0, r = nums.size() - 1, mid = 0;
    while (l <= r) {
        mid = (l + r) / 2;
        if (nums[mid] == target) return mid;
        else if (nums[mid] >= nums[l]) {//mid处于 1 部分
            if (nums[mid] > target && nums[l] <= target) r = mid - 1;
            else l = mid + 1;
        }
        else {//mid处于2部分
            if (nums[mid] < target && nums[r] >= target) l = mid + 1;
            else r = mid - 1;
        }
    }
    return -1;
}

 

33.Search in Rotated Sorted Array

标签:span   vector   while   lse   因此   使用   复杂   div   思路   

原文地址:https://www.cnblogs.com/luo-c/p/12923966.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!