题目:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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/