【LeetCode】35. 搜索插入位置

1 问题

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

请必须使用时间复杂度为 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

2 答案

自己写的,采用蓝红二分法,套模板,简单方便

python 复制代码
class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        l = -1
        r = len(nums)
        while l+1 < r:
            mid = l+(r-l)//2
            if nums[mid] <= target: 
                l = mid
            else:
                r = mid
        if nums[l] == target:
            return l
        else:
            return r

官方解,将三种情况 nums[middle] < targe, nums[middle] > target, nums[middle] = target,也比较好理解

python 复制代码
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  # 没有相等的,则插入,并返回索引 right + 1
相关推荐
一只乔哇噻11 分钟前
java后端工程师+AI大模型开发进修ing(研一版‖day61)
java·开发语言·学习·算法·语言模型
Cx330❀24 分钟前
Git 基础操作通关指南:版本回退、撤销修改与文件删除深度解析
大数据·运维·服务器·git·算法·搜索引擎·面试
前端小白在前进26 分钟前
力扣刷题:合并两个有序数组
算法·leetcode·职场和发展
leoufung29 分钟前
LeetCode 433:Minimum Genetic Mutation 题目理解与 BFS 思路详解
数据库·leetcode·宽度优先
john_hjy44 分钟前
标量、向量、矩阵、张量
算法·机器学习·矩阵
qq_430855881 小时前
线代第一章行列式第八课:克莱姆法则(Cramer法则)
线性代数·算法·矩阵
小妖6661 小时前
力扣(LeetCode)- 542. 01 矩阵
算法·leetcode·矩阵
小年糕是糕手1 小时前
【C++】内存管理(下)
java·c语言·开发语言·数据结构·c++·算法
CoderYanger1 小时前
第 479 场周赛Q2——3770. 可表示为连续质数和的最大质数
java·数据结构·算法·leetcode·职场和发展
像风一样自由20201 小时前
U-Net 图像分割算法:从零开始的完全指南
算法