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

LeetCode 33. Search in Rotated Sorted Array

时间:2018-06-02 00:44:20      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:leetcode   解决   div   习惯   class   cto   元素   etc   个人   

Binary Search的变种。由于rotated的存在,直接A[mid]<key的判断并无法解决继续搜索哪一半边。

思路是分情况,分为左半边有序还是右半边有序,再细分是继续搜索左半侧还是右半侧。可以用开区间做也可以闭区间,个人习惯闭区间。

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int low=0, high=nums.size()-1;
        int mid;
        while (low<=high){
            mid = (low+high)/2;
            if (nums[mid]==target) return mid;
            if (nums[0]<=nums[mid]){ //left side is in order
                if (nums[0]<=target && target<nums[mid]) high=mid-1;
                else low=mid+1;
            }else{ //right side is in order
                if (nums[mid]<target && target<=nums[high]) low=mid+1;
                else high=mid-1;
            }
        }
        return -1;
    }
};

其中 nums[0]==nums[mid] 归到了 nums[0]<nums[mid]。 由于没有重复的元素,nums[0]==nums[mid] 只可能在搜索区间只有两个元素的时候出现。此时,如果左边元素就是target,之前的语句就会return,因此一定不是第一个元素,low=mid+1,因此可以归到 nums[0]<nums[mid] 中。二分的边界情况还是要小心。

LeetCode 33. Search in Rotated Sorted Array

标签:leetcode   解决   div   习惯   class   cto   元素   etc   个人   

原文地址:https://www.cnblogs.com/hankunyan/p/9123940.html

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