1.这是一篇数据结构学习的开头,仅供个人参考以及博主:-小黄怪- 参考学习。
2.主要是拿来给自己做笔记的,学啥记啥,有意思的就记。
3.接下来的日子,不定时更新,内容看个人学习,yeah,加油。
本文主要是为了解决LeetCode上二分查找的应用问题,搜索插入位置。
题目:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 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
思路:
本题是需要用二分查找进行解题,在前俩篇的基础上,我们主要是要思考在大于目标值target与小于目标值target时,对应m,n的边界赋值问题,以及最重要的如何去跳出循环。
由于情况有多种,元素包含在列表里的正常处理即可,但是,元素不包含的情况要如何返回就是值得思考的,可以自己过一遍例子,然后可以发现m与n之间的变化,最后得到跳出循环的条件。
#二分查找应用(二)
from typing import List
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
m = 0
n = len(nums) - 1
while m+n>=0:
o = (m+n)//2
if target == nums[o]:
return o
elif target < nums[o]:
n = o - 1
elif target > nums[o]:
m = o + 1
if m > n:
return m
if __name__ == "__main__":
a = Solution()
print(a.searchInsert(nums=[1,3],target=0))