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)

 

posted @ 2020-03-05 23:20  leahtao  阅读(111)  评论(0编辑  收藏  举报