Given an array of integers nums which is sorted in ascending order, and an integer target, write a function to search target in nums. If target exists, then return its index. Otherwise, return -1.
You must write an algorithm with O(log n) runtime complexity.
Example 1:
Input: nums = [-1,0,3,5,9,12], target = 9
Output: 4
Explanation: 9 exists in nums and its index is 4
一开始,我是这样写的~
在这里插入代码片
```var search = function(nums, target) {
let left=0;
let right=nums.length-1;
while (left<=right)
{
mid=(right+left)/2
if(nums[mid]==target){
return mid;
}
else if (nums[mid]<target){
left=mid+1;
}
else{
right=mid-1;
}
return -1;
}
};
忘记 把return -1 忘在外面。。。。。
第二次还是错误
```javascript
var search = function(nums, target) {
let left=0;
let right=nums.length-1;
while (left<=right)
{
mid=(right+left)/2
if(nums[mid]==target){
return mid;
}
else if (nums[mid]<target){
left=mid+1;
}
else{
right=mid-1;
}
}
return -1;
};
原来是因为。。 Math.floor !!! (除法都记得考虑!!)
正确了
var search = function(nums, target) {
let left=0;
let right=nums.length-1;
while (left<=right)
{
mid=Math.floor(left+(right-left)/2)
if(nums[mid]==target){
return mid;
}
else if (nums[mid]<target){
left=mid+1;
}
else{
right=mid-1;
}
}
return -1;
};
记住! Math.floor
nums.length !!
标准答案
function search(nums, target) {
let left = 0;
let right = nums.length - 1;
while (left <= right) {
let mid = Math.floor((left + right) / 2);
if (nums[mid] === target) {
return mid;
} else if (nums[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}