搜索旋转排序数组
来源:1-2 算法面试只是面试的一部分
慕粉3884565
2021-11-28
var search = function (nums, target) {
let leng = nums.length;
if (leng < 1) {
return -1;
}
if (leng === 1) {
return target === nums[0] ? 0 : -1;
}
let l = 0;
let r = leng - 1;
while (l <= r) {
let middle = Math.floor((l + r) / 2);
if (nums[middle] === target) {
return middle;
}
if (nums[0] <= nums[middle]) {
if (nums[0] <= target && target < nums[middle]) {
r = middle - 1;
} else {
l = middle + 1;
}
} else {
if (nums[middle] < target && target <= nums[right]) {
l = middle + 1;
} else {
r = middle - 1;
}
}
}
};
老师这是代码关于边界问题我都晓得,现在疑问是
if (nums[0] <= target && target < nums[middle]) {
r = middle - 1;
} else {
l = middle + 1;
}
这里哈如果进了这个IF判断标识target在这个范围为什么不用l=middle+1
是因为如果这么运算会导致下标跃出有序的边界
其实我之前想的正好与代码相反就是l运算在if,r的运算是l,老师可以给我讲下这个疑惑吗,就是这点
写回答
1回答
-
liuyubobobo
2021-11-29
请问这是力扣第几号问题。谢谢。
042021-11-30
相似问题