题目地址(35. 搜索插入位置)
https://leetcode-cn.com/problems/search-insert-position/
题目描述
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。示例 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示例 4:输入: nums = [1,3,5,6], target = 0输出: 0示例 5:输入: nums = [1], target = 0输出: 0提示:1 <= nums.length <= 104-104 <= nums[i] <= 104nums 为无重复元素的升序排列数组-104 <= target <= 104
前置知识
- 二分查找
公司
- 暂无
思路
关键点



这时继续进入循环 触发了nums[mid] < target的条件 使得begin+1 也就是新元素插入的位置
如果情况改变 end比left小了 直接就返回left
所以无论是哪种情况 最后返回的应插入的元素的位置都是left
代码
- 语言支持:Java
Java Code:
class Solution {public int searchInsert(int[] nums,int target) {int begin = 0, end = nums.length - 1;while (begin <= end) {int mid = (begin + end) / 2;if (nums[mid] > target) {end = mid - 1;} else if (nums[mid] < target){begin = mid + 1;}else {return mid;}}return begin;}}
复杂度分析
令 n 为数组长度。
- 时间复杂度:
#card=math&code=O%28logn%29&id=kvZyN)
- 空间复杂度:
#card=math&code=O%28n%29&id=lsig7)
