- 题目
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。 如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
- 示例
示例 1: 输入: nums = [1,3,5,6], target = 5 输出: 2 示例 2: 输入: nums = [1,3,5,6], target = 2 输出: 1 示例 3: 输入: nums = [1,3,5,6], target = 7 输出: 4
- 解题思路
- 方法一:首先本题思路,找到第一个大于等于target的元素位置,即插入位置。所以直接遍历数组,找到第一个大于等于target的元素位置就是结果。但本题要求时间复杂度为log(n),那么需要进行优化。
- 方法二:二分查找。算法思路:将数组分成两份,left=0,mid=(left + right) / 2,right=length-1。根据mid与target的大小,进一步划分区域。如果mid>target,说明target在0到mid之间。反之,在mid到length-1之间。将范围缩小(left = mid + 1 或 right = mid - 1 ), 继续比较。本题可以用二分查找的思想,不过算法是查找相等数据,本题需要查找第一个大于等于的数据。
- 这里说明下为什么以left进行返回:
本题结果即找到第一个大于等于target的元素。在二分查找的过程中,遇到的第一个mid对应
- 这里说明下为什么以left进行返回: