力扣33、搜尋旋轉排序陣列
阿新 • • 發佈:2021-12-01
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 intmid=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 }