1 static int wing=[]() 2 { 3 std::ios::sync_with_stdio(false); 4 cin.tie(NULL); 5 return 0; 6 }(); 7 8 class Solution 9 { 10 public: 11 int search(vector<int>& nums, int target) 12 { 13 int sz=nums.size(); 14 if(sz==0) 15 return -1; 16 int flag= (nums[0]<=target)? 0:1; 17 int left=0,right=sz-1; 18 if(flag==0) 19 { 20 while(left<right) 21 { 22 int mid=left+((right-left)>>1); 23 int flagmid= (nums[mid]>=nums[0])? 0:1; 24 if(flagmid==0) 25 { 26 if(nums[mid]==target) 27 return mid; 28 else if(nums[mid]>target) 29 right=mid; 30 else 31 left=mid+1; 32 } 33 else 34 right=mid-1; 35 } 36 return (nums[left]==target? left:-1); 37 } 38 else 39 { 40 while(left<right) 41 { 42 int mid=left+((right-left)>>1); 43 int flagmid= (nums[mid]>=nums[0])? 0:1; 44 if(flagmid==1) 45 { 46 if(nums[mid]==target) 47 return mid; 48 else if(nums[mid]>target) 49 right=mid; 50 else 51 left=mid+1; 52 } 53 else 54 left=mid+1; 55 } 56 return (nums[left]==target? left:-1); 57 } 58 } 59 };
分块,分情况讨论,目标值和mid在一个区则查找,否则更新两端指针
33. Search in Rotated Sorted Array
原文:https://www.cnblogs.com/zhuangbijingdeboke/p/9280079.html