Leetcode day3--35. 搜索插入位置

【题目描述】

【思路】

如果存在那就很方便,直接indexof就行,但是不存在,就要寻找数组中最接近target的那个数

可以用target减去数组中所有的值再求绝对值,得到一个差值的数组,再寻找差值数组中最小的数。如果最小的数仅有一个,那么target要么插在他的左边,要么就是右边,比较一下大小即可;如果最小的数有两个,那么必定插在第一个最小值后。

例如:[1,3,5,6],target=4

 差值数组为[3,1,1,2],有两个最小值,那么必定插在第一个最小值的右边,也就是返回值为第一个最小值的下标+1

例如:[1,3,7,9],target=4

差值数组为[3,1,3,5],就要比较一下target和差值为1的这个数哪个数大。target大,那就返回下标+1;target小,就直接返回第一个最小值的下标

【注意的是】

Math.min或者Math.max不能直接寻找数组中的最小值,就是说

arr = [1,2,3,4,5]

Math.max(arr) 返回的是undefined

必须要这样使用:

var array=[2,7,5,8,9];
Math.min.apply(null,array);

参考文章:Javascript复习--Math.min和Math.max方法_入不了门的猿-CSDN博客_math.min

【代码】

			/**
			 * @param {number[]} nums
			 * @param {number} target
			 * @return {number}
			 */
			var searchInsert = function(nums, target) {
				var exist = nums.indexOf(target)//先判断target是否存在与原数组中
				var differ = []//存储差值数组
				result = 0//返回值
				if(exist >= 0){
					result = exist//存在,直接返回下标
				}
				if(exist < 0 ){//不存在,先得到差值的绝对值,构成一个数组
					for(var i = 0 ; i < nums.length ; i++){
						differ.push(Math.abs(target-nums[i]))
					}
					var minNumber = Math.min.apply(null ,differ)//寻找数组中的最小值
					var index = differ.indexOf(minNumber)
					var index2 =differ.lastIndexOf(minNumber) 
					console.log(index,index2)
					
					if(index == index2){//最小值只有一个
						result = (target>nums[index])?index+1:index
					}
					if(index != index2){//最小值有两个
						result = index+1
					}
					
				
				}
				if(target < nums[0]){//如果target比第一个小,或者比最后一个大,就可以直接指定插入的位置,这样跑的速度会更快
					result = 0
				}
				if(target > nums[nums.length-1]){
					result = nums.length
				}
				return result
			};
			
			  nums = [3,4,9,10]  
			  target = 5
			console.log(searchInsert(nums,target))

【结果】

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值