刷
June-21-2019
这个题代码写得不如一刷简洁
1 - 先通过nums[l] < nums[r] 判断是否rotate
2 - 通过nums[m]和nums[l] 关系判断是6 7 1 2 3 4 5,还是6 7 8 9 1 2,左边右边哪边多,然后再接着判断,感觉就是楞做的。。
仔细看其实把1的判断去掉也能过= =因为1的逻辑已经囊括在2里面了,所以这次写的不如一刷简洁= =
public int search(int[] nums, int target) {
if (nums == null || nums.length == 0) return -1;
int l = 0, r = nums.length - 1;
while (l + 1 < r) {
int m = l + (r - l) / 2;
int val = nums[m];
if (val == target) {
return m;
}
// } else if (nums[l] < nums[r]) {
// if (val < target) {
// l = m + 1;
// } else {
// r = m - 1;
// }
// }
else {
// 6 7 8 1 2 3 4 5
if (val < nums[l]) {
if (target > val && target <= nums[r]) {
l = m;
} else {
r = m;
}
} else {
// 6 7 8 9 10 11 1 2 3
if (target >= nums[l] && target < val) {
r = m;
} else {
l = m;
}
}
}
}
if (nums[l] == target) {
return l;
} else if (nums[r] == target) {
return r;
} else {
return -1;
}
}