81. Search in Rotated Sorted Array II

 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 }

 

posted @ 2018-09-16 00:08  jasoncool1  阅读(143)  评论(0编辑  收藏  举报