1 class Solution {
2 public boolean search(int[] nums, int target) {
3 if(nums.length == 0) return false;
4 int lo = 0, hi = nums.length-1;
5 while(lo <= hi) {
6 int mid = lo + (hi-lo) / 2;
7 if(nums[mid] == target) return true;
8 if(nums[mid] == nums[hi]) { //要是遇到mid和hi或lo重复 为了判断哪边是单调的 必须hi-- or lo++
9 hi--;
10 continue;
11 }
12 if(nums[mid] == nums[lo]) {
13 lo++;
14 continue;
15 }
16 if(nums[mid] <= nums[hi]) {
17 if(nums[mid] < target && target <= nums[hi]) {
18 lo = mid + 1;
19 }else {
20 hi = mid - 1;
21 }
22 }else {
23 if(nums[mid] > target && target >= nums[lo]) {
24 hi = mid - 1;
25 }else {
26 lo = mid + 1;
27 }
28 }
29 }
30 return false;
31
32 }
33 }