classSolution{public:boolsearch(vector<int>&nums,inttarget){if(nums.empty())returnfalse;if(target ==nums[0])returntrue;// 预处理 删除最后一段的重复元素int l =0, r =nums.size()-1;while(r >0&&nums[0]==nums[r]) r--;int r_cpy = r;// 1. 二分寻找旋转位置while(l < r){int mid = l + r +1>>1;if(nums[0]<=nums[mid]) l = mid;else r = mid -1;}// 2. 找到在那一段 二分if(target >=nums[0]) l =0;else l++, r = r_cpy;while(l < r){int mid = l + r >>1;if(target <=nums[mid]) r = mid;else l = mid +1;}returnnums[r]== target;}};