【二分查找】81. 搜索旋转排序数组 II

题目:

 

 

解答:

 1 class Solution {
 2 public:
 3     bool search(vector<int>& nums, int target) 
 4     {
 5         int l = 0;
 6         int r = nums.size() -1;
 7         
 8         while (l <= r)
 9         {
10             while (l != r && nums[l] == nums[r])
11             {
12                 r--;
13             }
14             
15             int mid = l + (r - l) / 2;
16 
17             if (target == nums[mid]) 
18             {
19                 return true;
20             }
21             
22             // if (nums[l] == nums[mid]) 
23             // {
24             //    l++;
25             //    continue;
26             // }
27 
28             // 前半部分有序
29             if (nums[l] <= nums[mid])
30             {
31                 if (nums[l] <= target && target < nums[mid])
32                     r = mid-1;
33                 else
34                     l = mid+1;
35             }
36             else
37             {
38                 if (nums[mid] < target && target <= nums[r])
39                     l = mid +1;
40                 else
41                     r = mid -1;
42             }
43         }
44         return false;
45     }
46 };

 

posted @ 2020-05-05 12:35  梦醒潇湘  阅读(146)  评论(0)    收藏  举报