题目描述
- 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置
- 请必须使用时间复杂度为
O(log n)的算法
解题思路
- 通过题目要求时间复杂度为
O(log n),想到了使用二分查找法解决
- 另外使用
O(n),也可以遍历所有元素解决
- 两种方法仅供参考
二分查找算法原理
- 二分查找(Binary Search)算法,也叫折半查找算法。
- 每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。
- 如果中间元素值大于查找值,则往数组的左边继续查找,如果小于查找值则往数组右边继续查找。
- 局限性:一般只针对有序数组。
解题代码(JavaScript)
var searchInsert = function (nums, target) {
let low = 0;
let high = nums.length - 1;
while (low <= high) {
let mid = Math.floor((low + high) / 2);
if (target === nums[mid]) {
return mid;
} else if (target < nums[mid]) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return low;
};
var searchInsert = function (nums, target) {
for (let i = 0; i < nums.length; i++) {
if (target <= nums[i]) {
return i;
}
}
return nums.length;
};