【题目】
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
示例 :
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
【解题思路】

- 定义查找的范围 [left,right],初始查找范围是整个数组。
- 每次取查找范围的中点 mid,比较 nums[mid] 和 target的大小,如果相等则 mid即为要寻找的下标。
- 如果不相等则根据 nums[mid]和 target的大小关系将查找范围缩小一半
【代码】
var search = function(nums, target) {
// 在区间[left,right]中查找元素,左闭右闭
let left = 0;
let right = nums.length - 1;
while (left <= right) {
// 计算中间点
let mid = parseInt(left + (right-left)/2);
if (target == nums[mid]) {
return mid;
// 如果target < nums[mid],表示目标值可能在左半边
} else if (target < nums[mid]){
right = mid - 1;
// 如果target > nums[mid],表示目标值可能在右半边
} else if (target > nums[mid]){
left = mid + 1;
}
}
// 未找到返回-1
return -1;
};
常见的算法题解析,大部分都是使用java,python或者C语言编写的,对前端程序员非常不友好
为了更好的学习算法与数据结构,我特意总结了一些基础算法的解题思路和具体代码,并且编写了一个文档,正在持续更新中...
如果大家有兴趣,公众号后台回复 bbbb01 获取文档,我们可以一块探讨学习......

839

被折叠的 条评论
为什么被折叠?



