leetcode 35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
输入: [1,3,5,6], 5
输出: 2
解法一:for循环
var searchInsert = function(nums, target) {
for(let i =0; i<nums.length; i++){
if(nums[i] >= target){
return i
}
}
return nums.length
};
解法二:二分法
var searchInsert = function(nums, target) {
let left = 0;
let right = nums.length-1
while(left <= right){
let mildle = Math.round( (left + right)/2)
if(nums[mildle] == target) {
return mildle
}else if(target > nums[mildle]) {
left = mildle+1
}else if (target < nums[mildle]){
right = mildle-1
}
}
return left
};
二分法使用于数据量大时,使用前提是数组需要先排好序,最主要的思想是对序列进行递归或者循环查找
注意:为什么最后要返回left,是因为循环结束的条件是left > right,所有left更接近中间值。建议大家在纸上设置几个参数,画一下,就很容易理解
时间复杂度:最坏的情况查找最后一个元素0(log2n),最好的情况是中间元素即为要找的那个元素,0(1)
不积跬步无以至千里