classSolution{public:boolsearch(vector<int>&nums,inttarget){intl=0;intr=nums.size()-1;while(l<=r){constintm=(l+r)/2;if(nums[m]==target)returntrue;if(nums[l]==nums[m]&&nums[m]==nums[r]){++l;--r;}elseif(nums[l]<=nums[m]){// nums[l..m] are sortedif(nums[l]<=target&&target<nums[m])r=m-1;elsel=m+1;}else{// nums[m..n - 1] are sortedif(nums[m]<target&&target<=nums[r])l=m+1;elser=m-1;}}returnfalse;}};
classSolution{publicbooleansearch(int[]nums,inttarget){intl=0;intr=nums.length-1;while(l<=r){finalintm=(l+r)/2;if(nums[m]==target)returntrue;if(nums[l]==nums[m]&&nums[m]==nums[r]){++l;--r;}elseif(nums[l]<=nums[m]){// nums[l..m] are sortedif(nums[l]<=target&&target<nums[m])r=m-1;elsel=m+1;}else{// nums[m..n - 1] are sortedif(nums[m]<target&&target<=nums[r])l=m+1;elser=m-1;}}returnfalse;}}
classSolution:defsearch(self,nums:List[int],target:int)->bool:l=0r=len(nums)-1whilel<=r:m=(l+r)//2ifnums[m]==target:returnTrueifnums[l]==nums[m]==nums[r]:l+=1r-=1elifnums[l]<=nums[m]:# nums[l..m] are sortedifnums[l]<=target<nums[m]:r=m-1else:l=m+1else:# nums[m..n - 1] are sortedifnums[m]<target<=nums[r]:l=m+1else:r=m-1returnFalse