leetcode日刷第一天!

拖延了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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

总结

之所以自己写的递归版没有写出来,主要有两个因素:

  1. 二分法的mid都写错了。。。写成了mid = (end - start) // 2
  2. 终止条件设置不对。应为start > end
  3. 忘记添加尾调用,造成最终返回结果为None。回溯到最后一层的时候,如果没有尾调用,就会返回None

refer
二分法查找的递归实现(python) - 知乎 (zhihu.com)
Python实现二分查找(递归与非递归)_wo850781645的博客-CSDN博客

一篇很棒的二分法总结
写对二分查找不能靠模板,需要理解加练习 (附练习题,持续更新) - 搜索插入位置 - 力扣(LeetCode) (leetcode-cn.com)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序...
    禾木清清阅读 151评论 0 0
  • 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的...
    刻苦驴哝阅读 160评论 0 0
  • 题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按...
    mydre阅读 340评论 0 0
  • LeetCode 搜索插入位置 [简单] 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标...
    是小猪童鞋啦阅读 328评论 0 0
  • 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的...
    仁安天下阅读 107评论 0 0