Leetcode 每日一题 2020.7.17

188 阅读1分钟

Leetcode 每日一题 2020.7.17

35. 搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。

审题

很显然算法考察的是数组中查找,查找的时间复杂度最快是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 -