Leetcode 每日一题 2020.7.17
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
审题
很显然算法考察的是数组中查找,查找的时间复杂度最快是O(logn),即二分查找
二分查找的工作原理
我随便想一个
1~100的数字,你的目标是以最少的次数猜到这个数字。你每次猜到后,我会说小了、大了或者对了。
假设你从1开始查找,那你需要猜最多99次,才能猜对,这种是简单查找更确切的说是傻找。每次只能排除一个数字。

有一种最佳的查找方式,从
50开始,小了,排除了一大半的数字,至此,你知道1~50都小了。

大了,把剩余的数字又排除了一半,你猜测的中间的数字,从而每次都将余下的数字排除一半。这就是二分查找法

言归正传,我们来看题目,寻找目标值的位置,我们用二分查找来寻找目标值的位置,每次都排除一半的数字。具体实现如下:
JavaScript
var searchInsert = function(nums, target) {
var n = nums.length;
var low = 0;
var hight = n -1;
var ans = n;
while (low <= hight) {
var mid = ((hight - low)>>1) + low;
var midnum = nums[mid];
if (midnum >= target) {
ans = mid;
hight = mid -1;
}else{
low = mid + 1;
}
}
return ans
};
本文使用 mdnice 排版
- END -