35.插入搜索位置

题目:

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

方法一:暴力遍历求解法

顺序遍历整个数组搜索target位置,若nums[i]>target,表示i位置之前的数都小于target,因此数组中没有target,则返回i,i所在的位置就是target应插入的位置。若nums[i]=target,找到target了,直接返回target所在位置i。遍历结束后没有搜索到,则返回数组长度,target应插入的位置则是数组最后。

class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
     # 顺序查找
        for i in range(len(nums)):
            if nums[i] >= target:
                return i
        return len(nums)

 方法二:二分法优化求解法

主要就是使用了二分查找法的思想,与普通的二分查找的区别在于,它的target可能不在数组中,这时我们返回的就是目标值的插入位置。

class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        left = 0
        right = len(nums)-1
        while left <= right:
            m = (left+right)//2
            if target < nums[m]:
                right = m-1
            elif target > nums[m]:
                left = m+1
            else:
                return m
        return right+1

看到力扣里好多题解都是返回left,想了好久还是理解不了,最后按照我个人的理解返回right+1,没想到也是可以的,嘻嘻

大家如果有更好的解法啊或者其他想法的,可以在评论区打出来哦,这样就能一起学习啦。如果觉得我的方法还不错的话,留下一个小小的赞吧!!! 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值