力扣33、搜索旋转排序数组


1、二分法(4ms,69%;10.8MB,70%)

时间复杂度:O(log n)

空间复杂度:O(1)

 1 int search(vector<int>& nums, int target) {
 2         //这里的empty()注意是空则返回真
 3        if(nums.empty())
 4        return -1;
 5        if(nums.size()==1)
 6        return nums[0]==target? 0:-1;
 7        int left=0,right=nums.size()-1;
 8        int mid=0;
 9        while(left<=right){
10            mid=(left+right)/2;
11            if(nums[mid]==target)
12            return mid;
13            //这里的=是细节,当两者相等时是执行if而不是else
14            //if成立说明前半部分有序
15            if(nums[left]<=nums[mid]){
16                if(target>=nums[left]&&target<nums[mid])
17                right=mid-1;
18                else
19                left=mid+1;
20            }
21            //else成立说明后半部分有序
22            else{
23                if(target>nums[mid]&&target<=nums[right])
24                left=mid+1;
25                else
26                right=mid-1;
27            }
28        }
29        return -1;
30     }