Я смотрю на этот вопрос
Одно из решений похоже на this :
class Solution:
def search(self, nums: 'List[int]', target: int) -> int:
L, H = 0, len(nums)
while L < H:
M = (L+H) // 2
if target < nums[0] < nums[M]: # -inf
L = M+1
elif target >= nums[0] > nums[M]: # +inf
H = M
elif nums[M] < target:
L = M+1
elif nums[M] > target:
H = M
else:
return M
return -1
Вместо использования nums[0]
Я пытался использовать числа [последний]
Вот код, который много раз пытался, не удалось заставить его работать.
var search = function(n, tar) {
let lo = 0;
let hi = n.length;
let m;
let last = n.length-1;
const max = Number.MAX_SAFE_INTEGER;
const min = Number.MIN_SAFE_INTEGER;
while(lo < hi) {
// this is index
m = Math.floor( (lo+hi)/2 );
if(tar == n[m]) {
return m;
} else if(tar == n[last]) {
return last;
} else if(tar < n[last] && n[m] > n[last]) {
// n[m]...........tar.....n[last]
lo = m+1;
} else if(tar > n[last] && n[m] < n[last]) {
// tar........n[m]......n[last]
hi = m;
} else if(tar < n[last] && tar < n[m]) {
// ...........tar, n[m], n[last]
hi = m;
} else if(tar < n[last] && tar < n[m]) {
// ............n[m], tar, n[last]
lo= m+1;
} else if(tar > n[last] && tar < n[m]) {
// tar, n[m].......... n[last]
hi=m;
} else if(tar > n[last] && tar > n[m]) {
// n[m], tar.......... n[last]
lo=m+1;
} else {
return m;
}
}
return -1;
};