您的位置:首页 > 其它

33. Search in Rotated Sorted Array

2016-04-03 04:44 399 查看
虽然是hard难度,其实也没有很难

分为三种情况:

1. 如果nums[mid] == target

那么返回mid

2. 如果nums[mid] < nums[right]

那么说明在nums里面,从mid到right的顺序是正确的,所以:

  1)如果target值范围介于nums[mid]和nums[right]之间

    那么结果就在mid的右侧,所以left = mid+1;

  2)否则right = mid-1

3.否则(也就是nums[mid]>= nums[right],就说明从left到mid的顺序是对的)

  1)如果target值在left到mid中间

    那么,right = mid-1;

  2) 否则,left = mid+1

public int search(int[] nums, int target) {
if(nums == null || nums.length == 0) {
return -1;
}
int left = 0;
int right = nums.length-1;
while(left <= right) {
int mid = left+(right-left)/2;
if(nums[mid] == target) {
return mid;
} else if(nums[mid] < nums[right]) {
if(target > nums[mid] && target <= nums[right]) {
left = mid + 1;
} else {
right = mid - 1;
}
} else {
if(target < nums[mid] && target >= nums[left]) {
right = mid-1;
} else {
left = mid+1;
}
}
}
return -1;
}


bug记录

12行和18行,<=和>=,不能漏掉=,否则在边界上的数字就会被忽略,导致错误结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: