问题
例子
思路
-
方法1
-
方法2
代码
//方法1
class Solution {
public boolean search(int[] nums, int target) {
if(nums==null || nums.length==0) return false;
int i=0,j=nums.length-1;
while(i<=j) {
//处理重复数字 1,1,3,1
//i<j,保证i+1或j-1不超过范围
while(i<j && nums[i]==nums[i+1]) i++;
while(i<j && nums[j]==nums[j-1]) j--;
int m=i+(j-i)/2;
if(nums[m]==target) return true;
else if(nums[m]<=nums[j]) {//右边是有序的
if(nums[m]<target && target<=nums[j]) {
i=m+1;
}else{
j=m-1;
}
}else{
if(nums[i]<=target && target<nums[m]) {
j=m-1;
}else{
i=m+1;
}
}
}
return false;
}
}
//方法2