开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情
一、题目描述:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 的算法。
示例 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 <= 10^4
- -10^4 <= nums[i] <= 10^4
- nums 为无重复元素的升序排列数组
- -10^4 <= target <= 10^4
二、思路分析:
当nums中只有一个数据时,target小于等于该数据则返回0,否则返回1
如果nums的长度大于等于2时,此时有三种情况:
target大于nums中的所有值
target大于最小的,小于等于最大的
target小于最小的
三、AC 代码:
func searchInsert(nums []int, target int) int {
if len(nums) == 1{
if target > nums[0]{
return 1
}else{
return 0
}
}
for i := 0; i < len(nums) - 1; i++{
if target > nums[len(nums)-1]{
return len(nums)
}else if nums[i] < target && nums[i+1] >= target{
return i+1
}
}
return 0
}
四、总结:
标准的二分,二分有很多种写法,也有很多的模板,建议多多练习。熟练了套模板就好了。
范文参考:
搜索插入位置 - 搜索插入位置 - 力扣(LeetCode) (leetcode-cn.com)
无需二分查询,O(n)时间复杂度简单到爆炸的代码 - 搜索插入位置 - 力扣(LeetCode)
写对二分查找不是套模板并往里面填空,需要仔细分析题意 - 搜索插入位置 - 力扣(LeetCode) (leetcode-cn.com)