算法练习第三天(简单)搜索插入位置
2021/12/12 14:17:18
本文主要是介绍算法练习第三天(简单)搜索插入位置,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
今天是练习算法的第三天
题目描述:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 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 };
两者的对比,其实从代码可读性来看,其实我个人认为还是第二次写的更好一些
这篇关于算法练习第三天(简单)搜索插入位置的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)