一起学算法-35. 搜索插入位置

一、题目

LeetCode-35. 搜索插入位置
链接:https://leetcode-cn.com/problems/search-insert-position/

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

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

示例 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

二、解题思路

整体思路和普通的二分查找几乎没有区别,重点在于边界条件的判断。

三、实现过程

c++

class Solution {
public:
    int searchInsert(vector& nums, int target) {
        int left = 0,right = nums.size() - 1,mid;
        while(left <= right){ //注意
            mid = (left + right) /2;
            if(nums[mid] == target){
                return mid;
            }else if(nums[mid] > target){
                right = mid - 1; //注意
            }else{
                left = mid + 1; //注意
            }
        }
        return left; //注意
    }
};

PHP

class Solution {

    /**
     * @param Integer[] $nums
     * @param Integer $target
     * @return Integer
     */
    function searchInsert($nums, $target) {
        $left = 0;
        $right = count($nums) - 1;
        while($left <= $right){
            $mid =(int)(($left+$right)/2);
            if($nums[$mid] == $target){
                return $mid;
            }else if($nums[$mid] > $target){
                $right = $mid - 1;
            }else{
                $left = $mid + 1;
            }
        }
        return $left;
    }
}

JavaScript

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function(nums, target) {
        let left = 0,right = nums.length - 1,mid;
        while(left <= right){
            mid = Math.floor((left + right) /2);
            if(nums[mid] == target){
                return mid;
            }else if(nums[mid] > target){
                right = mid - 1;
            }else{
                left = mid + 1;
            }
        }
        return left;
};

四、小结

二分查找时间复杂度为O(logN),空间复杂度为O(1)。

基础难度

  1. 69. x 的平方根
  2. 852. 山脉数组的峰顶索引
  3. 374. 猜数字大小
  4. 367. 有效的完全平方数

进阶难度

  1. 153. 寻找旋转排序数组中的最小值
  2. 34. 在排序数组中查找元素的第一个和最后一个位置
  3. 540. 有序数组中的单一元素

你可能感兴趣的:(一起学算法-35. 搜索插入位置)