javascript/js 算法题练习 之 搜索插入位置

题目:

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

你可以假设数组中无重复元素。

示例 1:

输入: [1,3,5,6], 5
输出: 2


示例 2:

输入: [1,3,5,6], 2
输出: 1


示例 3:

输入: [1,3,5,6], 7
输出: 4


示例 4:

输入: [1,3,5,6], 0
输出: 0

我的解答: 

我试了两种解法。

第一种

用indexOf判断target是否在nums里面,如果是的话直接返回它的index,否的话就push进nums里面,nums进行从小到大的排序,然后再返回target的index

var searchInsert = function(nums, target) {
  if (nums.indexOf(target)===-1){
    nums.push(target)
    nums = nums.sort(
      function(a,b){return a - b}
    )
  }
  return nums.indexOf(target)
};


但是这种方式结果不太理想啊


第二种

假设nums是[1,3,5,7],target是4,结果应该返回2,也就是应该替代大于它的5的位置(把5往后挤)。
假设target是5,结果同样应该返回2,就是数组中已经存在的5的位置。
假设target是8,则结果应该返回4,数组中没有一个数字比它大,它总是排在最后面,它的index也就是这个数组的length。


综上所述得出下面的代码:

var searchInsert = function(nums, target) {
  
  for(i=0;i<nums.length;i++){
    if(nums[i]>=target){
      return i
    }
  }
  return nums.length
  
};


结果就好多了(运行时间在60ms-80ms不等……我只是截了一张最快的哈哈)

 


原文链接:https://leetcode-cn.com/problems/search-insert-position/solution/javascriptjs-liang-chong-jie-fa-by-cheng-zi-57/
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值