ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法练习第三天(简单)搜索插入位置

2021-12-12 14:04:37  阅读:134  来源: 互联网

标签:return target nums 第三天 目标值 插入 算法 数组 var


今天是练习算法的第三天

题目描述:

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

请必须使用时间复杂度为 O(log n) 的算法。

注意:题目要求的是:时间复杂度必须是O(log n)

知识点回顾:O(log n)的本质:输入规模翻倍,操作次数只增加一(具体可以参考国王赏麦的那个故事,就是我们初中学幂运算的那个例子)

         解题分析:首先,我们需要做出判断,目标值是否在数组中,如果在数组中,那么我们就可以直接使用第一天的二分查找直接循环出结果;但是如果目标值不在数组中,这时我们该怎么办呢?我的思路是那就将这个目标值插入到数组中,因为这个数组是按照升序排列的,所以我们也需要将他按照升序排列,这样才能满足题目的要求,于是动手之后的结果如下:

var searchInsert = function(nums, target) {
    if(nums.indexOf(target)== -1){
        nums.push(target)
    }
    nums.sort((a,b)=>a-b);
    var low=0,high=nums.length;
    while(low<=high){
        mid=Math.floor((low+high)/2)
        if(nums[mid]>target){
            high=mid-1
        }else if(nums[mid]==target){
            return mid
        }else
            low=mid+1
    }
    return mid
};

关于函数的选择:我在判断数组中是否有这个目标值的时候,选择的是indexof,当然也可以选择其他的函数来判断如find、findIndex等等,在if中使用push插入这个数值,之后将他升序排列一下即可。

当我提交之后,我发现其实这道题在我之前刷算法题目的时候,自己已经写过了,但是我发现今天写的这个要比以前写的执行时间更短,内存消耗也更少,但还是将这个代码放出来,供大家参考,一起学习!

var searchInsert = function(nums, target) {
    var a
    function findMeth(num,target){
        for(var i in num){
            if(num[i] === target){
                return a =i
            }
        }
    }
    var a =(nums.concat(target))
    var b =a.sort(function(a,b){
        return a-b
    })
    findMeth(a,target)
    return a
};

两者的对比,其实从代码可读性来看,其实我个人认为还是第二次写的更好一些

标签:return,target,nums,第三天,目标值,插入,算法,数组,var
来源: https://blog.csdn.net/m0_57446284/article/details/121886337

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有