20191022-leetcode-33搜索旋转排序数组

在这里插入图片描述
分析:时间复杂度 O ( l o g n ) O(logn) Ologn,于是想到了二分查找。
把一个字符串从mid处切开,那么必定一部分是有序的,另一部分是无序的。不断切割,直到待查找的数落在了一个有序的区间内,二分查找即可。

class Solution {
public:
    int search(vector<int>& nums, int target)
    {
        int le=0,ri=nums.size()-1;
        int mid=le+(ri-le)/2;
        if(nums.size()==1&&nums[0]==target) return 0;
        while(le<=ri)
        {
            if(nums[mid]==target)return mid;
            if(nums[le]==target) return le;
            if(nums[ri]==target) return ri;

            //cout<<nums[mid]<<" "<<nums[le]<<" "<<nums[ri]<<endl;

            mid=le+(ri-le)/2;
            if(nums[le]<nums[mid])       //左半部分有序
            {
                if(nums[le]<target&&nums[mid]>target) {ri=mid-1;}
                else {le=mid+1;}
            }
            else                         //右半部分有序
            {
                if(nums[mid]<target&&target<nums[ri]){le=mid+1;}
                else {ri=mid-1;}
            }
        }
        return -1;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值