81. 搜索旋转排序数组 II

 1 class Solution 
 2 {
 3 public:
 4     bool search(vector<int>& nums, int target) 
 5     {
 6             int l = 0, r = nums.size()-1;
 7             while(l <= r)
 8             {
 9                 //处理重复数字
10                 while(l < r && nums[l] == nums[l + 1]) ++l;
11                 while(l < r && nums[r] == nums[r - 1]) --r;
12                 int mid = l + (r - l)/ 2;
13                 if(nums[mid] == target) return true;
14                 //左半部分有序
15                 if(nums[mid]>=nums[l])
16                 {
17                     if(target <= nums[mid] && target >= nums[l]) r = mid - 1;//target落在左半边
18                     else l = mid + 1;
19                 }
20                 else//右半部分有序
21                 {
22                     if(target >= nums[mid] && target <= nums[r]) l = mid + 1;//target落在右半边
23                     else r = mid - 1;
24                 }
25             }
26             return false;
27         }
28 };

 

posted @ 2020-03-31 10:30  Jinxiaobo0509  阅读(107)  评论(0)    收藏  举报