MyCode
1. 很纯真的用大脑模拟了一边,然后去想如何去找到那个位置,然后精简了一下代码,结果如下
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var searchInsert = function(nums, target) {
for(let i = 0;i<nums.length;i++){
if(target<=nums[i]){
return i;
}
}
return nums.length;
};
想法+javascript语法,更加简洁的表达方式
var searchInsert = function(nums, target) {
return nums.filter(n=>n<target).length;
};
在浏览其他的回答中,发现一个有趣的javascript,就是数组越界时,返回的是undefined
,并不会报错
var searchInsert = function(nums, target) {
for(var i=0;nums[i]<target;i++);
return i
};
算法: 二分法
var searchInsert = function(nums, target) {
return binarySearch(nums,target,0,nums.length);
};
let binarySearch = (nums,target,start,end)=>{
// 临界条件
if(start>end) return start;
const mid = Math.floor((start+end)/2);
if(nums[mid]===target){
return mid;
}else if(nums[mid]<target){
// 右边寻找
return binarySearch(nums,target,mid+1,end);
}else{
// 左边寻找
return binarySearch(nums,target,start,mid-1);
}
}