美文网首页
LeetCode真题 搜索插入位置

LeetCode真题 搜索插入位置

作者: 暖男Gatsby | 来源:发表于2020-02-15 17:22 被阅读0次

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

    例子:输入: [1,3,5,6], 5  输出: 2  输入: [1,3,5,6], 2  输出: 1  输入: [1,3,5,6], 7输出: 4  输入: [1,3,5,6], 0 输出: 0

    解题思路:

            当看到升序,查值就自然而然想到二分法,先用二分法找到目标值,这个很简单,套用模板就对了,但是当这个目标值不存在,就要考虑这个目标值能放在哪,此时如果用插入法进行遍历(寻找比目标值大的元素,一旦发现即返回数组元素的索引)查找,无疑增加了时间复杂度,于是我想到了二分法的left与right指针所在位置,

    经过测试分两种情况讨论,

    一、如果left与right指针都离开过起始位置,那么只需计算while循环结束后,left指针指向的元素必然移动到了right的后方,那么需要考虑的就是arr[left]是否大于目标值,若是则返回left索引号,否之返回left+1。

    二、left与right指针有一个不曾离开过起始位置(考虑数组满溢的情况),那么简单直接考虑是否大于数组最后一个元素,或者小于数组第一个元素。

    var searchInsert = function(nums, target) {

            let l=0;

            let r=nums.length-1;

            let mid = (l+r)>>>1;

            if(target>nums[r]) return r+1;

            if(target<nums[l]) return 0;

            while(l<=r){

                if(target==nums[mid]) return mid;

                if(target<nums[mid]){

                        r = mid -1;

                 }else{

                        l = mid +1;

                     }

              }

                if(nums[l]>target){

                    return l

                }else {

                    return l+1  

            }

     };

    相关文章

      网友评论

          本文标题:LeetCode真题 搜索插入位置

          本文链接:https://www.haomeiwen.com/subject/csryfhtx.html