先贴代码,等有时间了,再来详细整理一下思路
class Solution {
/**
* @param Integer[] $nums
* @param Integer $target
* @return Integer
*/
function search($nums, $target) {
$low = 0;
$size = count($nums);
if ($size == 1) {
if ($target == $nums[0]) {
return 0;
} else {
return -1;
}
}
$high = $size - 1;
while ($low <= $high) {
$mid = $low + floor(($high - $low) / 2);
if ($nums[$mid] == $target) {
return $mid;
}
if ($nums[$low] <= $nums[$mid]) {
// 左边有序
if ($target >= $nums[$low] && $target < $nums[$mid]) {
$high = $mid - 1;
} else {
$low = $mid + 1;
}
} else {
if ($target <= $nums[$high] && $target > $nums[$mid]) {
$low = $mid + 1;
} else {
$high = $mid - 1;
}
}
}
return -1;
}
}