拖延了4天了,今天我一定要开始leetcode日刷!【time: 09:14】
更新:半个小时没做出来,先放上题解。
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-insert-position
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
left, right = 0, len(nums) - 1
while left <= right:
middle = (left + right) // 2
if nums[middle] < target:
left = middle + 1
elif nums[middle] > target:
right = middle - 1
else:
return middle
return right + 1
作者:carlsun-2
链接:https://leetcode-cn.com/problems/search-insert-position/solution/dai-ma-sui-xiang-lu-che-di-jiang-tou-er-yg187/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
总结
之所以自己写的递归版没有写出来,主要有两个因素:
- 二分法的mid都写错了。。。写成了
mid = (end - start) // 2
- 终止条件设置不对。应为
start > end
- 忘记添加尾调用,造成最终返回结果为None。回溯到最后一层的时候,如果没有尾调用,就会返回None
refer
二分法查找的递归实现(python) - 知乎 (zhihu.com)
Python实现二分查找(递归与非递归)_wo850781645的博客-CSDN博客
一篇很棒的二分法总结
写对二分查找不能靠模板,需要理解加练习 (附练习题,持续更新) - 搜索插入位置 - 力扣(LeetCode) (leetcode-cn.com)