【LeetCode刷题】35. 搜索插入位置

1:题目描述(力扣

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

 2:解题思路

 可以使用暴力的解法和二分法来讲解此题

第一种解法:暴力遍历解法

题目给出的是一个排序的数组。

从下标0开始遍历数组,当目标值target小于当前遍历的值,说明target不在原数组中,并且后面的元素都大于目标值,则需要将目标值target在当前位置插入数组,即返回当前下标;

当目标值target等于当前遍历的值,说明找到在数组中找到了元素,即返回当前下标。

代码展示:

class Solution:
    def searchInsert(self, nums, target):
        for i in range(len(nums)):
            if nums[i] >= target:
                return i       # 当nums[i]大于target时,需要将target插入当前位置,当nums[i]等于target,则找到了目标元素
        return len(nums)       # 当nums最大的元素都小于目标值时,需要将目标值插入到数组末尾

第二种解法:二分法

第一步:先初始化左边界下标(left=0)和右边界下标(right=len(nums))

第二步:当left <= right时,进入循环,获取中间元素下标(mid=(left+right)//2),当nums[mid] < target,修改左边界下标,left=mid+1;当nums[mid] > target,修改右边界下标,right=mid-1,当nums[mid] = target,返回mid

第三步:当目标值不在数组中,1:当目标值小于第一个元素,经过第二步,未找到目标值,此时right<left,需要将目标值插入数组,插入后下标为right+1;2:当目标值处于中间某两个元素中间,需要将目标值插入右边较大的元素位置,插入后下标为right+1;3:当目标值大于最后一个元素,经过第二步,未找到元素,需要将目标值插入数组末尾,插入后下标为right+1

代码展示:

class Solution:
    def searchInsert(self, nums, target):
        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   # 当没有找到元素时,插入目标元素的位置

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值