搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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
解题过程:
注意:1.nums是一个有序排列(升序)
思路:
1. target是否在数组中存在
2. target 元素大小比较
func searchInsert(nums []int, target int)int{ lens := len(nums) if lens == 0{ return 0 } // 确认是否存在数组中 for k, v := range nums { if v == target{ return k } } // 确认按循序插入的位置 cursorIndex := 0 for i:=0; i< lens ; i++{ if nums[i] < target{ cursorIndex = i+1 } } return cursorIndex }
优化:不需要确认是否存在target,只需要找出第一个大于等于target的元素所在索引值
func searchInsert(nums []int, target int) int { for i, key := range nums { if target <= key { return i } } return len(nums) }
深度优化: 目前我们看到的数组,元素个数都比较少,如果存在N个元素,那么循环比较的销量相对下降。
可以使用二分法算法,查找第一个小于等于target的元素。
有疑问加站长微信联系(非本文作者)